OneDev

[C] 22. 전처리기 (preprocessor) (#include, #define, #error, #ifdef) 본문

Language/C

[C] 22. 전처리기 (preprocessor) (#include, #define, #error, #ifdef)

one_dev 2023. 7. 26. 17:01

▣ 전처리기 (preprocessor)

→ 소스코드의 특정 부분을 컴파일 이전에 처리하도록 컴파일러에게 알려주는 텍스트 처리기.

(전처리기문 끝에는 세미콜론 (;) 을 붙이지 않는다)

 

◎ #define

  • 상수, 함수 등을 매크로로 정의할 수 있다
  • [ #define 매크로이름 ] 의 형태로 사용한다 
  • 소스코드에서 "매크로이름" 에 해당하는 부분을 "값"으로 대체하게 된다
#define VAR 10

 

◎ #undef

  • #define 을 통해 정의한 매크로를 해제

◎ #include

  • 지시문이 표시되는 지점에 지정된 파일의 내용을 포함하도록 지시하는 기능
  • < > 로 감싸는 헤더 파일  → 컴파일러에서 기본으로 지원하는 헤더파일인 경우 ( <stdio.h>, <string.h> 등)
  • " " 로 감싸는 헤더파일 → 사용자가 직접 제작한 헤더파일인 경우
#include <stdio.h>
#include <string.h>
#include "something.h" // 사용자가 만든 임의의 헤더파일

 

◎ #ifdef, #ifndef, #endif

  • #ifdef →  어떤 매크로가 정의되어 있다면 #endif 전까지의 내용을 을 코드에 포함 
  • #ifndef → 어떤 매크로가 정의되어 있지 않다면 #endif 전까지의 내용을 코드에 포함하지 않음 (#ifdef 와 정반대)
  • #endif → #if 의 종료를 의미
#define A

int main() {
    /* A라는 매크로가 정의 되어 있으므로 아래의 내용을 코드에 포함시킨다 */
    #ifdef A 
    printf("여기는 출력된다 \n");
    #endif
    
    /* B라는 매크로는 정의되어 있지 않으므로 아래의 내용은 무시된다 */
    #ifdef B 
    printf("여기는 출력이 안된다 \n");
    #endif

    return 0;
}

 

 

◎ #error

  • #error 지시문은 컴파일 시간에 사용자가 지정한 오류 메세지를 내보낸 다음 컴파일을 종료합니다
  • #error 표시할 메세지 형식으로 사용 (따옴표는 쓰지 않는다)
/* #error 사용 예제 */
#if !defined(__cpluscplus) // __cplusplus 가 정의되어 있지 않다면
    #error C++ compiler required. // C++ compiler required. 라는 오류 메세지를 출력 후 컴파일 종료 
#endif

 

 

◎  그외 전처리기들 (#if, #elif, #else, #endif, ....)

그 외 전처리기들에 대한 설명은 아래의 링크를 참고하세요.

https://learn.microsoft.com/ko-kr/cpp/preprocessor/c-cpp-preprocessor-reference?view=msvc-170

 

 

 

'Language > C' 카테고리의 다른 글

[C] memcpy  (0) 2023.08.01
[C] 23. 메모리 동적 할당(Dynamic Memory Allocation) - malloc, free  (0) 2023.07.31
[C] 21. 구조체(struct)  (0) 2023.07.21
[C] 20.문자열(String)  (0) 2023.07.18
[C] 19.함수(function)  (0) 2022.08.23
Comments