카테고리 없음

[C언어] 미리 정의된 매크로(Predefined Macro)

s뽈록이s 2013. 7. 15. 11:26
void main()
{
	printf("오늘은 %s이고  최후 컴파일된 시간은 %s입니다.\n", __DATE__, __TIME__);
	printf("이 파일이 최종 수정된 시간은 %s입니다.\n", __TIMESTAMP__);
	printf("이 파일은 %s이고 이 줄은 %d입니다.\n",__FILE__, __LINE__);
	#ifdef __STDC__
		printf("이 컴파일러는 ANSI C표준을 따릅니다.\n");
	#else
		printf("이 컴파일러는 ANSI C표준의 확장(C++)입니다.\n");
	#endif
}

프로그램 실행화면


매크로명 설명

__DATE__ 컴파일될 때의 날짜

__TIME__ 현재 소스가 최후 컴파일된 시간

__TIMESTAMP__ 현재 소스가 최후로 수정된 날짜와 시간

__FILE__ 현재 소스 파일의 완전 경로

__LINE__ 이 매크로가 포함된 소스상의 줄 번호[10진수]

__STDC__ 컴파일러가 ANSI C 표준을 따를 경우 1로 정의, 그렇지 않을 경우 정의안됨.

C++로 컴파일할 때는 이 매크로가 없다.

_DEBUG 디버그 모드로 컴파일중일 때만 정의된다.
__cplusplus C++ 모드로 컴파일중일 때만 정의된다.
_DLL DLL 프로젝트일 때만 정의된다.
_MSC_VER 비주얼 C++의 컴파일러 버전을 나타낸다.
6.0은 1200으로 정의되며 7.0(닷넷)은 1300으로 정의된다.
_MFC_VER MFC 라이브러리의 버전값
_ATL_VER ATL의 버전값
_WIN32 Win32 환경일 때 정의된다.
_WIN64 Win64 환경일 때 정의된다.
__COUNTER__ 참조될 때마다 1씩 증가하는 정수값이다.
유일한 이름을 만들고자 할 때 이 매크로를 사용한다. 7.0 이상에서만 제공된다.
_M_ALPHA, _M_IX86, _M_IA64, _M_MPPC
CPU의 종류이다.
플랫폼에 따라 약간씩 코드가 달려져야 할 때 이 매크로를 참조한다.


미리 정의된 매크로는 컴파일러가 제공하는 매크로이다. 주로 컴파일러가 현재 상황이나 컴파일 중에 참고할만한 정보를 알려주기 위한 용도로 사용한다.


디버깅 정보를 출력하는 함수(assert)에서 __FILE__, __LINE__을 사용하면 쉽에 애러 위치를 출력해 줄 수 있으며 시간과 날짜를 이용해 버전이용에 활용할 수도 있다.


알아두면 좋은 매크로들이니 구구단을 벽에 붙여놓듯이 이런 것들은 어디다가 붙여놓는 것이 좋을 것 같다.