C, C++ 문법

#undef THIS_FILE ...이게 먼가여?

디버그정 2008. 9. 1. 16:08

#undef THIS_FILE ...이게 먼가여?

#undef THIS_FILE

기존에 THIS_FILE이 정의 되었을시 다시 재 정의 하겠다는 뜻입니다.

재정의가 아니고 원칙적인 뜻은 무효화하는 것이다.

__FILE__은  ANSI가 정의한 미리 정의된 매크로로서 현재 소스 파일의 이름과 행 번호를

의미하는 매크로 입니다.


ex) 1.cpp라는 소스파일로 저장했을시

 printf(""%s\n",__FILE__);

하면 결과는

 %PATH%1.cpp라는 결과를 얻게 됩니다.


__FILE__ 는 이러한 특성상 디버그용으로 많이 쓰입니다.

하지만, 문제점이 있는데 __FILE__경우 a.cpp b.cpp

중 a.cpp가 #include b.cpp했을 경우 매크로의 확장 후에 컴파일 되기 때문에

__FILE__이 있을 경우 결과값이 b.cpp가 아닌 a.cpp를 나타내는 오류를 범하게 됩니다.

결국 이러한 현상을 막기위해 static 동적 char THIS_FILE[]=__FILE__; 로 만들어 이러한

오류가 나지 않게 합니다.


MFC를 사용할경우 자동으로 생성한 각 cpp파일에 디버깅 모드의 정적 변수로 THIS_FILE이 정의 되어 있기 때문에 별로 신경 안쓰셔도 될겄 같습니다.

출처 : 윈도우 프로그래머를 위한 MFC 구조와 원리