본문 바로가기

C..C++....

#define 문법.. while, Singleton while 문을 사용하다보면 의도치 않게 기본적인 실수를 할때가 있습니다..그러다 잘못하면 무한루프에 빠지게 되는데... #ifdef _DEBUG #define WHILE WHILE_DEBUG #else #define WHILE while #endif // DEBUG #define WHILE_DEBUG(type) \ int __nCount = 0; \ while( type ) \ if(++__nCount > 100000) \ { printf("[FileName:%s][Func:%s][Line:%d]",__FILE__,__FUNCTION__,__LINE__); break; } \ else \ void main() { int nCnt = 0; WHILE(1) { ++nCnt; } printf("결과값 : %.. 더보기
visual studio 2012에서 gtest 컴파일시 std::touple 에러 해결방법.. vc11에서 google test나 google protocol 등... google 프로젝트등을 빌드하면 std::tuple 등의 에러가 나게 되는데그에따른 해결방법은. stdafx.h의 윗부분에다가#define _VARIADIC_MAX 10을 써주거나.. 프로젝트 -> 속성 -> C/C++ / 전처리기 -> 전처리기 정의에다가 _VARIADIC_MAX=10; 을 써주면 된다.. vc에서 사용중이 tuple이 표준안에 안맞아서 생기는거라고 하는데...2012 RC에서도 생기던 문제라 fix가 되어야 하는데 아직까지 안되고 있는듯... vs 2012(vc 11) 에 들어와서 기존에 tr1에 있던 tuple를 std에 포함시키면서tuple의 템플릿 갯수를 기본 5개(vc10과 boost는 10개)로 줄이면.. 더보기
tbb Visual studio 2012에서 빌드하기.. vs2010까지는 바이너리만 받아서 사용해도 됬었는데..TBB최신버전.. 2012/06/28일자 tbb 4.0 update 5 버전에는 vs2012에서 컴파일된 버전이 제공되지 않습니다...그래서 결국 직접 컴파일을 해야되는데...소스 받아서 직접 컴파일하면... OTL... 에러 발생!! 일단 std::copy_exception 관련 에러가 발생되는데 수정하는데 2가지 방법이 있습니다.. 가장 쉬운건..std::copy_exception 부분을 std::make_exception_ptr 이걸로 수정하는 방법과..프로젝트 속성 -> C/C++ -> 명령줄 -> 추가옵션 부분에 /DTBB_USE_CAPTURED_EXCEPTION=1 이걸 추가 하는방법... 둘중 아무거나 하신후 컴파일을 다시 실행하면..... 더보기
콘솔 윈도우 강제종료시 이벤트 처리하기 #include BOOL CtrlHandler(DWORD fdwCtrlType) { switch(fdwCtrlType) { case CTRL_C_EVENT: case CTRL_CLOSE_EVENT: case CTRL_LOGOFF_EVENT: case CTRL_SHUTDOWN_EVENT: case CTRL_BREAK_EVENT: default: printf("종료"); } return FALSE; } int _tmain(int argc, _TCHAR* argv[]) { BOOL fSuccess = SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler,TRUE); while(1) { } if(!fSuccess) { printf("종료2"); } return 0; } 자.. 더보기
boost 컴파일 하기 BOOST를 사용할때 보통 http://www.boostpro.com 에서 다운받아 사용하지만.. 요즘 업데이트를 안하기도 하고 x86 밖에 제공하지 않아서 직접 boost를 컴파일 해야 될 필요성이 있습니다. 1. 먼저 http://www.boost.org/ 에서 최신버전의 boost다운로드한다.. 2. 다운받은 파일을 압축풀고 bootstrap.bat를 실행시켜준다.. 그럼 b2.exe bjam.exe등...이 생성 된다.. 3. x86버전 필요시 visual studio 명령프롬프트 x64일경우에는 x64용 명령프롬프트를 실행시킨다. 4. 아래의 명령어를 x86/x64에 맞게 실행시켜준다 32비트용 bjam --toolset=msvc-10.0 link=static runtime-link=static.. 더보기
OPENSSL visual studio 에서 사용하기.. 1. openssl 다운로드 http://www.openssl.org/source/ 2. ActivePerl 설치 http://www.activestate.com/activeperl 3.. 전반적인 컴파일 환경 구축 압축이 해제된 디렉토리로 이동하여, 아래와 같이 명령어를 입력합니다. 1) x86 static library perl Configure VC-WIN32 --openssldir=C:\OpenSSL-x86 no-shared no-asm threads no-idea no-mdc2 no-rc5 2) x86 static debug library perl Configure debug-VC-WIN32 --openssldir=C:\OpenSSL-x86-debug no-shared no-asm threads.. 더보기
Console 윈도우에서 종료버튼 disable시키기. 콘솔 윈도우에서 강제 종료를 막을 필요가 있을때 사용해봅시다. EnableMenuItem(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE , MF_GRAYED); DrawMenuBar(GetConsoleWindow()); 더보기
BoostPool 사용하기.. BoostPool의 템플릿 버전입니다.. 그냥 상속받아서 new delete 하시면 됨니다.. #pragma once #include template class CBoostPool { public: void* operator new(size_t _size) { return m_bpool.malloc(); } void operator delete(void* _p) { m_bpool.free(_p); } protected: static boost::pool m_bpool; }; template boost::pool CBoostPool::m_bpool(sizeof(T)); class CTest : public CBoostPool { public: wchar_t m_szName[64]; }; void main(.. 더보기
error LNK 2005 xxxx이(가) MSVCPRT(D).lib 혹은 LIBCPMT(D).lib 에 이미 정의되어 있습니다.. 오류날때 대처방법 2011/06/13 - [C..C++....] - error LNK 2005 xxxx이(가) MSVCRT(D).lib 혹은 LIBCMT(D).lib 에 이미 정의되어 있습니다.. 오류날때 대처방법 MSVCPRT(d).LiB나 LIBCPMT(d).LIB 도 위에 나온 글과 같은 세팅문제로 생기는 문제입니다.. MSVCRT.LIB나 LIBCMT.LIB는 C Run-Time Libaray(CRT)에 관련된 파일이고 MSVCPRT(d).LiB나 LIBCPMT(d).LIB는 Standard C++ Libaray로 인해 생기는 문제입니다.. 이러한 문제가 생기는 원인을 간략히 설명하자면.. msvcrt 같은경우는 c 에서 사용하던 함수 예를들어 printf로 설명을 드리면 printf함수 하나를 가지고 총 6가지의.. 더보기
문자열 사용.. CString(CAtlstring)을 사용하면 기본적을 지원하는 기능이지만 stl의 string 을 사용하다보면 불편한점이 한둘이 아니다.. 가장먼저 CString #include //헤더 #include //헤더 /* #ifdef _UNICODE //유니코드일 경우 typedef CAtlStringW CAtlString; #else typedef CAtlStringA CAtlstring; #end typedef CAtlString CString; */ void main() { CString szTest; szTest.format(_T("%d,%s"),10,_T("test")); szTest.MakeUpper(); //대문자로 변환! szTest.MakeLower(); //소문자로 변환! int pos .. 더보기