C/C++: __LINE__, __FILE__, __FUNCTION__ 의 활용
C/C++ 프로그램이 오류를 일으켰을 때, 오류의 원인을 파악하기 위해 필요한 정보들이 있다. 파일 이름, 함수 이름, 줄 번호 따위이다. 다행히, C/C++ 컴파일러는 컴파일러 수준에서 이러한 정보들을 제공하고 있다. 바로 __FILE__, __FUNCTION__, __LINE__ 따위가 그것이다. 이름에서 알 수 있듯이, __FILE__ 은 파일이름, __FUNCTION__ 은 함수 이름, __LINE__ 은 줄번호를 나타낸다. 여기에서 주의할 점은 __FILE__ 과 __LINE__ 은 문자열 상수 매크로이지만, __FUNCTION__ 은 컴파일러에 따라 또는 컴파일 모드(C 모드인지 C++ 모드인지)에 따라 문자열 상수 매크로일 수도 있고 변수일 수도 있다. 매크로인지 변수인지에 따라 무엇이 달라지는 것일까 ? 만일 매크로라면 다음과 같은 문법이 가능하다. Colored By Color Scripter ™ 1 const char *str = "str is in " __FUNCTION__; 하지만 변수라면 컴파일러는 에러라며 불평할 것이다. 따라서 __FUNCTION__ 은 변수라고 가정하 고 프로그래밍하는 것이 컴파일러의 특성에 의존하지 않는 가장 안전한 방법이다. 그리고 __FUNCTION__ 하위 호환성을 위해 제공되는 것이고, c99 을 지원하는 컴파일러에서는 __func__ 도 쓸 수 있다. 물론, __func__ 는 변수다. 이것들을 어떻게 사용할까? 프로그래머마다 다르겠지만, 내 경우에는 진입/탈출 로그를 만들기 위해 많이 사용한다. 다음은 실제 사용예이다. Colored By Color Scripter ™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> #define ...