“C”标准是否支持类似于__func__
函数参数名称的内容?
user99081
问问题
5173 次
2 回答
5
不,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 添加了一些扩展,正如我想象的其他编译器所做的那样。
于 2009-05-25T09:29:08.853 回答
3
如果您想要一个快速而肮脏的解决方案,请制作像这样的预处理器宏......
#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()
这应该完全按照您的意愿工作,但它很丑陋。
于 2009-05-25T09:38:54.547 回答