원문 출처. 고수들이 절대 가르쳐 주지 않는 C/C++ 프로그래밍 팁 #4 – C/C++ 로깅 Facility
-
매크로 함수 정의에서 인자 x 에 대해 #x 라고 쓰면 x 가 문자열 리터럴로 바뀝니다.
#define assert(expr) \ ((void) ((expr) ? 0 : (__assert_fail (#expr, __FILE__, \ __LINE__, __func__), 0))) #define STRINGIFY(x) #x printf("%s = %d\n", STRINGIFY(10 + 100), 10 + 100); // 결과 10 + 100 = 110
-
__FUNCTION__ 또는 __func__ 는 현재 함수명을 출력하는 데 사용할 수 있습니다. 단, __FUNCTION__, __func__ 모두 portability 측면에서 약간 문제가 있으므로 주의해서 사용해야 합니다.
-
__FILE__ 은 현재 파일명을 출력하는 데 사용할 수 있습니다.
-
__LINE__ 은 현재 라인번호를 출력하는 데 사용할 수 있습니다.
-
조건부 컴파일을 이용해서 디비깅용 빌드와 Production 빌드를 구분하는 방법을 사용할 수 있어야 합니다.
-
컴파일러 옵션 중 preprocessing 만 하는 옵션을 알아두면 매크로 함수를 디비겅하는데 유용하게 사용될 수 있습니다.
Visual C++ 컴파일러 옵션
-
/E 전처리기 출력을 표준 출력에 복사합니다.
-
/EP 처리기 출력을 표준 출력에 복사합니다.
-
/P 전처리기 출력을 파일에 씁니다.
-
- __LINE__, __FUNCTION__, and __FILE__ macros
-
C, C++ 언어에서 디버깅시에 유용하게 쓸 수 있는 predefined macro 에 대한 설명
- Pre-defined C/C++ Compiler Macros
-
다양한 C/C++ 컴파일러에서 정의된 표준 및 비표준 predefined macro 목록을 잘 정의해 둔 곳
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.