C++/Syntax 2021. 3. 9. 19:20

전처리기 (Preprocessor)

기능

  • 파일 포함시키기

    • #include

    • 특정 파일을 현재 위치에 첨부하여 하나의 파일처럼 컴파일한다.

  • 조건부 컴파일

    • #if, #elif, #else, #ifdef, #ifndef, #endif

    • 조건에 해당되는 코드만 실행한다.

    • defined 키워드와 같이 사용하여 복합적으로 정의할 수 있다.

      • OS에 따라 다른 파일을 포함시키는 예제

        #ifdef __unix__ /* __unix__ is usually defined by compilers targeting Unix systems */
        # include <unistd.h>
        #elif defined _WIN32 /* _Win32 is usually defined by compilers targeting 32 or 64 bit Windows systems */
        # include <windows.h>
        #endif
      • 32, 64비트에 따라 다른 동작을 하는 예제

        #if !(defined __LP64__ || defined __LLP64__) || defined _WIN32 && !defined _WIN64
          // we are compiling for a 32-bit system
        #else
          // we are compiling for a 64-bit system
        #endif
  • 매크로

    • #define, #undef

    • 컴파일 중 토큰이 나오면 바로 해당 값으로 바꾸어 컴파일한다. (단순한 문자 교환)

    • 정의한 파일 내부에서만 적용된다.

    • 대상변환형(object-like macros) : 인수 X

    • 유사함수변환형(function-like macros) : 인수 O

      • 매크로 정의

        #define <identifier> <replacement token list>                    // object-like macro
        #define <identifier>(<parameter list>) <replacement token list>  // function-like macro, note parameters
      • 매크로 삭제

        #undef <identifier>  // delete the macro
    • ## 토큰 연결 연산자

      • 두 개의 토큰을 하나로 연결

        #define DECLARE_STRUCT_TYPE(name) typedef struct name##_s name##_t
        
        DECLARE_STRUCT_TYPE(g_object); // 변환 결과는 typedef struct g_object_s g_object_t;
  • #pragma

    • 컴파일러에게 특정 옵션이나 라이브러리 형태 등을 지정할 수 있다.

참고

'C++ > Syntax' 카테고리의 다른 글

C++ 소수점 (Decimal Point)  (0) 2021.03.09
C++ 자료형 (Data Type)  (0) 2021.03.09
C++ Namespace  (0) 2021.03.09
C++ 헤더가드 (Header Guard)  (0) 2021.03.09
C++ 초기화 (Initialization)  (0) 2021.03.09