C 是否具有函数参数名称的 __func__ 功能?

发布于 2024-07-22 02:24:33 字数 50 浏览 8 评论 0原文

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

Does the "C" standard support something similar to __func__ for the function arguments' names?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

踏月而来 2024-07-29 02:24:33

不,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 添加了一些 扩展,正如我想象的其他编译器所做的那样。

No, the C99 standard has the following:

6.10.8 Predefined macro names

The following macro names shall be defined by the implementation:

__DATE__ 
__FILE__ 
__LINE__ 
__STDC__ 
__STDC_HOSTED__ 
__STDC_MB_MIGHT_NEQ_WC__ 
__STDC_VERSION__ 
__TIME__ 

The following macro names are conditionally defined by the implementation:

__STDC_IEC_559__ 
__STDC_IEC_559_COMPLEX__ 
__STDC_ISO_10646__ 

6.4.2.2 Predefined identifiers

The identifier __func__ shall be implicitly declared by the translator as if,
immediately following the opening brace of each function definition, the declaration

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

appeared, where function-name is the name of the lexically-enclosing function.63)

gcc adds some extensions, as I imagine other compilers do.

残龙傲雪 2024-07-29 02:24:33

如果你想要一个快速而肮脏的解决方案,请像这样制作预处理器宏......

#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()

这应该完全按照你想要的方式工作,但是它很丑。

if you want a quick and dirty solution for this make pre-processor macros like this...

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

... and use it for your function headers and footers like this (tested with 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()

This should work exactly how you want, but it is ugly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文