2

“C”标准是否支持类似于__func__函数参数名称的内容?

4

2 回答 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 回答