C/C++ 로깅 관련 매크로 정리….

  • Post author:
  • Post category:
  • Post last modified:February 8, 2020

원문 출처. 고수들이 절대 가르쳐 주지 않는 C/C++ 프로그래밍 팁 #4 – C/C++ 로깅 Facility

  1. 매크로 함수 정의에서 인자 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
  2. __FUNCTION__ 또는 __func__ 는 현재 함수명을 출력하는 데 사용할 수 있습니다. 단, __FUNCTION__, __func__ 모두 portability 측면에서 약간 문제가 있으므로 주의해서 사용해야 합니다.

  3. __FILE__ 은 현재 파일명을 출력하는 데 사용할 수 있습니다.

  4. __LINE__ 은 현재 라인번호를 출력하는 데 사용할 수 있습니다.

  5. 조건부 컴파일을 이용해서 디비깅용 빌드와 Production 빌드를 구분하는 방법을 사용할 수 있어야 합니다.

  6. 컴파일러 옵션 중 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 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.