printf("\n Debug line %d, in the function %s, in the file %s.\n", __LINE__, __func__, __FILE__);
+
C99 에 새로 추가된 __func__ : 현재 function을 적어 줍니다.
__FILE__과 __LINE__ 등은 어디 에나 정의되어 있지 않습니다. __FILE__은 몰라도 __LINE__을 # define으로 정의하는 등있는 이유가없습니다. 이 같은 정의하지 않고도 마음대로 선언되는 매크로 것을 통합 매크로라고합니다.
출처 : http://kldp.org/node/20849
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03019.html
+
C99 에 새로 추가된 __func__ : 현재 function을 적어 줍니다.
__FILE__과 __LINE__ 등은 어디 에나 정의되어 있지 않습니다. __FILE__은 몰라도 __LINE__을 # define으로 정의하는 등있는 이유가없습니다. 이 같은 정의하지 않고도 마음대로 선언되는 매크로 것을 통합 매크로라고합니다.
ANSI C는 6 종류의 내장 매크로를 규정하고있습니다.
매크로 이름 | 어떻게 전개되는지 |
---|---|
__FILE__ __FILE__ | 파일 이름 리터럴 문자열. |
__LINE__ __LINE__ | 줄 번호를 나타내는 10 진수 숫자. |
__DATE__ __DATE__ | 현재 소스 파일을 컴파일하면 날짜. 월, 일, 년의 순으로 리터럴 문자열입니다. |
__TIME__ __TIME__ | 현재 소스 파일을 컴파일하면 시간. 시 : 분 : 초 형식의 리터럴 문자열입니다. |
__TIMESTAMP__ __TIMESTAMP__ | 현재 소스 파일을 저장하는 시간입니다. 요일, 월, 일, 년,시, 분, 초 순으로 리터럴 문자열입니다. |
__STDC__ __STDC__ | ANSI C를 준수하고 있는지 여부를 나타냅니다. 준수하는 경우 1로 정의되고 있지 않을 때 정의되지 않습니다. |
이 밖에도 도구 매 통합 매크로가 포함되어있을 수있습니다.
+
위에것을 가지고 여러가지를 조합해 봤다.
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define str(x) #x // "x" 을 만들어 낸다.
#define xstr(x) str(x) // str(x)를 처리한 결과를 " "로 묶어 준다.
#define xdstr(x,y) "%s, %d\n",x,y
#define DBG __FILE__, __LINE__
int main()
{
printf("%s, %d \n", __FILE__, __LINE__);
printf(xdstr(__FILE__, __LINE__));
printf("%s %d\n\n", DBG);
printf("%s\n", xstr(__FILE__) );
printf(xstr(__FILE__) "\n\n");
printf(str(__FILE__) "\n");
printf(str(Test) "\n\n");
return 0;
}
출처 : http://kldp.org/node/20849
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03019.html