Preprocessor Directive   전처리 지시자, 선행처리 지시자

(2024-06-06)

매크로 상수


1. [C 언어]  전처리 / 선행 처리전처리 / 선행 처리 이란?
     - 컴파일하기 전에 원시 프로그램을 단순 처리하는 컴파일러의 한부분 
        . 컴파일러에 특정 작업을 지시하는 부분으로써,
        . 사실상, 단지 텍스트 조작에 불과하고, 
        . 문법이나 의미에 대해서는 거의 고려치 않음

  ㅇ C 언어에서, 주요 전처리 기능 셋
     -  헤더 파일을 병합/포함 (#include)하여 확장해 주는 기능
     -  매크로 치환 (주로, #define 활용)
     -  조건부 번역 (#if 등)


2. [C 언어]  전처리/선행처리를 위한 지시자

  ㅇ (전처리 지시자)
     -  컴파일 환경에 맞게 원시 프로그램을 처리하는 방법을 일러주는 지시자

  ㅇ (유의할 점)
     -  반드시 #로 시작함
     -  한 줄에 하나씩 씀
     -  통상 프로그램 첫 칸부터 쓰여짐
     -  명령문 끝에 세미콜론(;)을 붙이지 않음

  ㅇ (종류)
     -  매크로 확장 지시자   : #define, #undef
     -  조건부 컴파일 지시자 : #if, #else, #elif, #endif, #ifdef, #ifndef 
     -  외부 파일 지시자     : #include
     -  기타 지시자          : #error, #line


3. [C 언어]  주요 전처리 (전처리 지시자) 例

  ㅇ (특정 파일 병합)
     -  #include : 파일 포함
        . <파일명> : C 언어 컴파일러 내 설정된 include 디렉토리에서 해당 파일을 찾음
        . "파일명" : 현재, 소스 파일이 있는 디렉토리를 먼저 찾고,
                     후에, include 디렉토리를 찾음

  ㅇ (매크로 지원)
     -  #define  : 매크로 정의
        . 例) #define 매크로명 값
           .. (상수)  #define ARRAY_SIZE 20 (매크로 상수 => 심볼릭 상수 참조)
           .. (함수)  #define ADD(a, b) a + b
     -  #undef   : 매크로 정의 해제

  ㅇ (조건부 컴파일 지원)
     -  조건부 컴파일은,
        . 목적 : 조건에 따라, 소스 코드의 해당 부분 `#if ~ #endif 등`의 컴파일 여부를 제어함
        . 용도 : 플랫폼,운영체제 마다 다르게 컴파일,디버깅,테스트 등에 사용하는 등  
     -  #if      : 조건이 참일 경우
     -  #else    : 조건이 거짓일 경우
     -  #ifdef   : 매크로가 정의되어 있는 경우 
     -  #ifndef  : 매크로가 정의되어 있지 않은 경우 
     -  #endif   : 조건부 컴파일의 종료

  ㅇ (컴파일 과정 지원)
     -  #line    : 행번호 출력
     -  #pragma  : 시스템 종별에 따라 다른 의미를 줌

  ㅇ (기타)
     -  #        : 매개변수를 한 쌍의 따옴표로 둘러싼 문자 형태로 변환
     -  ##       : 문자열 결합하여 변수 이름 등을 만듬
       . 例) #define CONCAT(a,b) a##b 
          .. CONCAT(c,d) => cd
       . 例) #define CNMD(NAME) strcpy(NAME ## _cmd, #NAME) 
          .. CNMD(copy) => strcpy(copy_cmd,"copy")

  ※ 한편,
     - 전처리 대상 및 결과 파일들은 모두가 읽을 수 있는 텍스트 형태의 파일 임

[C 언어 컴파일 ⇩]1. 라이브러리   2. C 라이브러리   3. 전처리 지시자   4. GNU C 컴파일러  

  1. Top (분류 펼침)      :     1,591개 분류    6,514건 해설

"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"
     [정보통신기술용어해설]       편집·운영 (차재복)          편집 후원          편집 이력