“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