happy coding

[c] 미리 정의된 매크로(predefined macro) 본문

self study/언어의 기본부터

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

yeoonii 2022. 11. 27. 23:58
TCP school을 보고 정리한 내용입니다.

미리 정의된 매크로

C언어에서는 컴파일러가 참고해야 할 정보를 알려주기 위해 몇가지 매크로를 미리 정의해 제공한다. 이 매크로는 #define 선행처리 지시자로 정의하지 않아도 사용할 수 있지만 사용자가 재정의할 수는 없다.

__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;
}

#line

#line 선행처리 지시자는 __LINE__ 매크로와 __FILE__ 매크로를 재정의할 수 있게 한다. 라인 번호는 Int형 타입으로, 파일명은 문자열로 전달된다. 이 선행처리 지시자는 사용자가 직접 사용하기보다는 주로 컴파일러가 오류 메시지를 위해 사용한다.

#error

#error 선행처리 지시자는 지정한 오류 메시지를 출력하고, 컴파일 과정을 중단시킨다. 주로 조건부 컴파일 선행처리 지시자와 함께 사용하여 디버깅에 사용된다.

#undef

#undef 선행처리 지시자는 #define 선행처리 지시자와 정확히 반대되는 동작을 수행한다. 즉, 이미 정의되어 있는 매크로를 취소하는 동작을 수행한다. 

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

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

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 분할 컴파일  (0) 2022.11.28
[c] 헤더 파일  (0) 2022.11.28
[c] 매크로 함수  (0) 2022.11.27
[c] 선행처리기  (0) 2022.11.27
[c] 파일 입출력 함수  (0) 2022.11.27
Comments