물론 내용은 직접작성한것이 아니라 웹사이트를 긁어왔다.
출처 : http://myhome.hanafos.com/~kukdas/doc/c_lect/c_lect-8.html
(2) #line
- 사용법은 다음과 같다.
#line 라인번호 "파일명" 또는 #line 라인번호
#line 문은 기정의 매크로상수 __LINE__ 과 __FILE__ 을 각각 라인번호와 파일명으로 바꾼다. 파일명을 생략하면 __FILE__ 은 바뀌지 않는다.
#define MACRO
#ifdef MACRO
#line 0 "direct.c" /* MACRO 가 정의되어 있을때만 컴파일됨 */
#endif
void main(void)
{
printf("Line : %d, Filename : [%s]\n",__LINE__,__FILE__);
#line 100 "main.c"
printf("Line : %d, Filename : [%s]\n",__LINE__,__FILE__);
}
(예상 결과)
Line : 5, Filename : [DIRECT.C]
Line : 101, Filename : [MAIN.C]
(실제 결과)
Line : 8, Filename : [C-TEST4.C]
Line : 10, Filename : [C-TEST4.C]
(설명)
#line, __LINE__, __FILE__ 의 사용법을 보인 예이다.
이 파일의 이름은 C-TEST4.C 이다.
실제로 결과는 예상과 전혀 다르게 나왔다.
#line 지시자가 전혀 효과가 없는 것이다.
아마 Turbo-C 2.0의 버그인 듯하다.
[추가]
__FUNCTION__ <== 이게 있더군요.. 위에 __FILE__ 는 절대 경로를 표시하므로 엄청 길고 번거롭습니다. 소스의 위치를 알려고 한다면 차라리 이게 더 나을것같네요.
전역함수일땐 함수명만 보여주고 클래스 맴버함수일땐 클래스::함수명 으로 표시됩니다.