C++ 전처리기 (Preprocessor)

2021. 3. 9. 19:20·SW개발/C++
반응형

전처리기 (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

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

참고

  • 위키백과
반응형
저작자표시 (새창열림)

'SW개발 > C++' 카테고리의 다른 글

C++ 자료형 (Data Type)  (0) 2021.03.09
따라하며 배우는 C++ 2장  (0) 2021.03.09
C++ Namespace  (0) 2021.03.09
C++ 헤더가드 (Header Guard)  (0) 2021.03.09
C++ 초기화 (Initialization)  (0) 2021.03.09
'SW개발/C++' 카테고리의 다른 글
  • C++ 자료형 (Data Type)
  • 따라하며 배우는 C++ 2장
  • C++ Namespace
  • C++ 헤더가드 (Header Guard)
Caniro
Caniro
  • Caniro
    Minimalism
    Caniro
  • 전체
    오늘
    어제
    • 전체보기 (318)
      • SW개발 (268)
        • Java Spring (6)
        • C++ (186)
        • Python (21)
        • Linux (16)
        • 알고리즘 (13)
        • Git (4)
        • Embedded (1)
        • Raspberrypi (9)
        • React (3)
        • Web (2)
        • Windows Device Driver (6)
      • IT(개발아님) (45)
        • Windows (25)
        • MacOS (7)
        • Utility (11)
      • 챗봇 짬통 (0)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알림
    KakaoTalk
    스프링 프레임워크 핵심 기술
    SunOS 5.1
    dism
    mspaint
    백기선
    Windows 11
    윈도우 명령어
    java
    그림판
    윈도우
    로지텍 마우스 제스처
    citrix workspace
    시스템 복구
    spring
    logi options
    vscode
    EXCLUDE
    스프링
    제외
    맥북 카카오톡 알림 안뜸
    Solaris 10
    SFC
    MacOS
    unix
    Workspace
    windows
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
C++ 전처리기 (Preprocessor)
상단으로

티스토리툴바