..

Search

49)미리 정의된 매크로

49)미리 정의된 매크로

미리 정의된 매크로


미리 정의된 매크로(predefined macro)

C언어에서는 컴파일러가 참고해야 할 정보를 알려주기 위해서 몇몇 매크로를 미리 정의하여 제공하고 있습니다.

미리 정의된 매크로는 #define 선행처리 지시자로 정의하지 않아도 사용할 수 있으나, 사용자가 재정의할 수는 없습니다.

 

C언어에서 제공하는 미리 정의된 매크로는 다음과 같습니다.

미리 정의된 매크로 설명
__DATE__ 선행처리가 수행된 날짜를 "Mmm dd yyyy"형식으로 나타낸 문자열
__TIME__ 선행처리가 수행된 시간을 "hh:mm:ss"형식으로 나타낸 문자열
__FILE__ 현재 소스 파일의 이름을 나타내는 문자열
__LINE__ 현재 소스 파일에서 처리중인 라인 번호를 나타내는 문자열
__STDC__ 컴파일러가 C언어 표준을 따르면 1로 설정함.
__STDC_HOSTED__ 호스트 환경이 아니면 0, 호스트 환경이면 1로 설정함.

 

예제

#include <stdio.h>  

 

int main(void)

{

    printf("선행처리가 수행된 날짜는 %s입니다.\n", __DATE__);

    printf("선행처리가 수행된 시간은 %s입니다.\n", __TIME__);

    printf("현재 소스 파일에서 처리중인 라인 번호는 %d입니다.\n", __LINE__);

    printf("__STDC__ : %d\n", __STDC__);

    printf("__STDC_HOSTED__ : %d\n", __STDC_HOSTED__);

    return 0;

}

코딩연습 ▶

실행 결과

선행처리가 수행된 날짜는 Feb 15 2017입니다.

선행처리가 수행된 시간은 17:03:55입니다.

현재 소스 파일에서 처리중인 라인 번호는 7입니다.

__STDC__ : 1

__STDC_HOSTED__ : 1


#line

#line 선행처리 지시자는 __LINE__ 매크로와 __FILE__ 매크로를 재정의할 수 있게 해줍니다.

라인 번호는 int형 타입으로, 파일명은 문자열로 전달됩니다.

이 선행처리 지시자는 사용자가 직접 사용하기보다는 주로 컴파일러가 오류 메시지를 위해 사용합니다.


#error

#error 선행처리 지시자는 지정한 오류 메시지를 출력하고, 컴파일 과정을 중단시킵니다.

주로 조건부 컴파일 선행처리 지시자와 함께 사용하여 디버깅에 사용됩니다.


#undef

#undef 선행처리 지시자는 #define 선행처리 지시지와 정확히 반대되는 동작을 수행합니다.

즉, 이미 정의되어 있는 매크로를 취소하는 동작을 수행합니다.

 

따라서 #define 선행처리 지시자에 의해 정의되는 매크로가 치환하는 범위는 #define 지시자가 정의된 위치부터 #undef 지시자에 의해 취소되는 위치나 파일의 끝까지가 됩니다.

단, 위에서 살펴본 미리 정의된 매크로는 사용자가 임의로 정의를 취소할 수 없습니다.


연습문제