Language/C C언어 강좌(조건부 컴파일/매크로 함수와 #undef)
  • 728x90
    반응형

     

     

     

    C언어


     

     

    조건부 컴파일

    • 지시자는 #if, #else, #elif, #endif가 있다.

    #if 조건 수식

        명령문1

    #else

        명령문2

    #endif

     

    • 조건수식이 참일 경우 명령문1 이 컴파일되고, 거짓일 경우에는 명령문2가 컴파일된다.
    • 작성중 오류를 검사하기 위한 출력코드를 프로그램에 삽입하였다가 프로그램 검사가 끝난 경우 출력문을 주우는 것을 조건부 컴파일을이용하면 다음과 같이 작성할 수 있다.

    #define DEBUG 1

    void main()

    {

    #if DEBUG == 1

        printf("program start\n);

    #endif

        .....

    }

     

    • 위와 같은 형식은 선택적 컴파일 또는 조건부 컴파일이라 한다.
    • 조건부 컴파일로 또 다른 지시자는 #ifdef, #ifndef, #endif로 매크로의 존재여부에 따라서 조건주 컴파일을 실행한다.
    • 매크로가 정의 되어 있을때 컴파일을 수행하고 #ifndef 는 매크로가 정의되어 있지 않을 경우 컴파일을 수행한다.

     

     

    🔔 예) 값을 수시로 바꾸어야 할 때

     

    🎯 프로그램 설명

    • DEBUG 를 #define 하지 않은 상태에서 컴파일시에 컴파일 명령어로 #define 하여 값을 변경할 수 있다.

     

    🔔 예)

    gcc -DDEBUG -o main main.c

     

    실행 결과

     

     

    🔔 예) make 파일 내부의 -D로 #define 되어 있는 값을 아래와 같이 리다이렉션으로 찾아낼 수 있다.

     

    [aaa. txt 파일 내부]

     

    • -DF_CPU = 16000000UL 의 값을 찾기위해 make 파일을 열어 검색한다.

     

     

     

    매크로 함수와 #undef

    • #define 지시자는 상수뿐만 아니라 함수도 정의할 수 있다.

    #define 매크로 이름(인수) (문자열)

     

     

    🔔 예) 매크로 함수의 사용 예

     

    🎯 프로그램 설명

    • gcc --save-temps -main.c 로 main.i 파일을 생성하여main.i 파일 내부의 위 함수의 매크로 부분이 치환된 것을 볼 수 있다.
    • type검사를 하지 않기 때문에 잘 사용되지 않는다.

     

    [main.i 파일 내부]

     

    실행 결과

     

    • #undef 지시자는 정의된 매크로를 해제하는 지시자이다.
    • 동일한 매크로를 여러 번 정의하였을 경우, #undef을 이용하면 가장 최근에 정의한 것이 취소되고 그 바로 전의 정의가 효력을 갖는다.

    #undef    매크로이름

     

    • 아래와 같이 사용한다.

    #define PI    3.1416

    #define PI    3.14

    area1 = 5 * 5 * PI;

    #undef PI

    area2 = 5 * 5 * PI;

     

    • 이 경우 area1은 PI 값이 3.14로 계산되고, area2의 경우 PI값이 3.1416으로 계산된다.

     

     

     

     

    728x90
    반응형
상단으로