매번 새프로젝트를 생성할 때마다 절실하게 필요한 몇몇 함수가 있는데 그 중 하나가 로그 출력 함수인 것같다.
아래는 윈도우 기반의 가변인자 로그출력, 메시지 박스 출력, 스트링 합성 함수이다.
유니코드와 멀티바이트 모두에서 사용 가능하도록 구현하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <iostream> #include <stdarg.h> #include <tchar.h> #include <Windows.h> #define DEBUG_MODE 1 typedef std::basic_string<TCHAR> tstring; tstring MakeString(const TCHAR* str, ...){ va_list args; int len; // 시작. va_start(args, str); // 가변인자로 이루어진 문자열의 크기를 구한다. len = _vsctprintf(str, args) + 1; // _vscprintf doesn't count terminating '\0' // 위에서 구한 크기+1만큼 buffer에 메모리를 할당한다. TCHAR* buffer = new TCHAR[len + 1]; // 문자열을 buffer에 입력한다. _vstprintf(buffer, str, args); // 끝. va_end(args); tstring s(buffer); delete[](buffer); return s; } void CLog(const TCHAR* str, ...) { #if(DEBUG_MODE >= 1) va_list args; int len; // 시작. va_start(args, str); // 가변인자로 이루어진 문자열의 크기를 구한다. len = _vsctprintf(str, args) + 1; // _vscprintf doesn't count terminating '\0' // 위에서 구한 크기+1만큼 buffer에 메모리를 할당한다. TCHAR* buffer = new TCHAR[len]; // 문자열을 buffer에 입력한다. _vstprintf(buffer, str, args); // 끝. va_end(args); OutputDebugString(buffer); OutputDebugString(_TEXT("\n")); delete[](buffer); #endif } void CLogBox(TCHAR * szCaption, TCHAR * szFormat, ...) { // 가변인자로부터 문자열 얻기. va_list args; int len; // 시작. va_start(args, szFormat); // 가변인자로 이루어진 문자열의 크기를 구한다. len = _vsctprintf(szFormat, args) + 1; // _vscprintf doesn't count terminating '\0' // 위에서 구한 크기+1만큼 buffer에 메모리를 할당한다. TCHAR* buffer = new TCHAR[len + 1]; // 문자열을 buffer에 입력한다. _vstprintf(buffer, szFormat, args); // 끝. va_end(args); MessageBox(NULL, buffer, szCaption, MB_OK); delete[](buffer); } void main() { tstring msg = MakeString(_TEXT("%s"), _TEXT("안녕하세요.")); CLog(_TEXT("%s"), msg.c_str()); CLogBox(_TEXT("알림"), _TEXT("%s"), _TEXT("메시지 박스 출력")); } | cs |
'All > C++' 카테고리의 다른 글
자주 사용하는 STL function (0) | 2016.11.28 |
---|---|
operator new / operator delete (0) | 2016.03.14 |
메모리 누수 검사 (0) | 2015.12.29 |
RValue와 LValue (2) | 2015.12.28 |
문장줄이기 (0) | 2015.12.28 |