C是否具有函数参数名称的__func__function?
“C”标准是否支持类似于__func__
的函数参数名称?
如果你想要一个快速和肮脏的解决方案,使这样的预处理器宏……
#define FUNCTION_HEADER(a) a { const char* __func__ = #a; #define FUNCTION_FOOTER() }
…并将它用于这样的函数页眉和页脚(使用VS 2008测试):
#include #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__
应由翻译器隐式声明,就像紧跟在每个函数定义的__func__
大括号后面的声明一样
static const char __func__[] = "function-name";
出现了,其中function-name是词法封闭函数的名称.63)
正如我想其他编译器所做的那样,gcc增加了一些扩展 。