컴퓨터공부/C & C++ & STL

debug에 사용할 메시지

achivenKakao 2009. 4. 9. 01:22
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으로 정의하는 등있는 이유가없습니다. 이 같은 정의하지 않고도 마음대로 선언되는 매크로 것을 통합 매크로라고합니다.

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