C는 함수 인수의 이름에 대한 __func__ 함수가 있습니까?

StackOverflow https://stackoverflow.com/questions/905999

  •  05-09-2019
  •  | 
  •  

문제

"C"표준은 __func__ 함수 인수의 이름을 위해?

도움이 되었습니까?

해결책

이를 위해 빠르고 더러운 솔루션을 원한다면 이와 같은 사전 프로세서 매크로를 만드십시오 ...

#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }

... 그리고 이와 같은 기능 헤더 및 바닥 글에 사용하십시오 (VS 2008로 테스트) :

#include <windows.h>

#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }

FUNCTION_HEADER( int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) )
    MessageBoxA(0, __func__, __func__, MB_OK);
    return 0;
FUNCTION_FOOTER()

이것은 당신이 원하는 방식으로 정확하게 작동하지만 추악합니다.

다른 팁

아니요, C99 표준에는 다음이 있습니다.

6.10.8 사전 정의 된 매크로 이름

다음 매크로 이름은 구현에 의해 정의되어야합니다.

__DATE__ 
__FILE__ 
__LINE__ 
__STDC__ 
__STDC_HOSTED__ 
__STDC_MB_MIGHT_NEQ_WC__ 
__STDC_VERSION__ 
__TIME__ 

다음 매크로 이름은 구현에 의해 조건부로 정의됩니다.

__STDC_IEC_559__ 
__STDC_IEC_559_COMPLEX__ 
__STDC_ISO_10646__ 

6.4.2.2 사전 정의 된 식별자

식별자 __func__ 각 함수 정의의 개방 버팀대 직후 선언에 따라 번역기가 암시 적으로 선언해야합니다.

     static const char __func__[] = "function-name";

function-name이 어휘에 밀려있는 함수의 이름 인 곳에서 나타납니다 .63)

GCC가 일부를 추가합니다 확장, 다른 컴파일러가 생각하는 것처럼.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top