ant*_*009 19 c macros visual-studio
使用gcc 4.4.2和WinXP Visual Studio C++ 2008进行编译
#if defined ( WIN32 )
#define __FUNCTION__ __func__
#endif
Run Code Online (Sandbox Code Playgroud)
因为我想使用宏来显示函数名称.我已经做了以上所以我可以跨平台,并在linux或windows上编译时使用相同的函数.
但是,当我在WinXP上编译时,我收到以下错误:
__func__ undeclared identifier
Run Code Online (Sandbox Code Playgroud)
我不能#define像这样的宏吗?
非常感谢任何建议,
tom*_*gic 25
看起来你有你的#define
落后.如果你想__func__
在两个平台上使用,而WIN32有,__FUNCTION__
但__func__
你需要这样做:
#if defined ( WIN32 )
#define __func__ __FUNCTION__
#endif
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法来了解您是否需要定义__func__
,但这种快速入侵应该可以解决问题.
请记住,在支持__FUNCTION__
和__func__
关键字的编译器上,它们不是宏,因此您无法执行以下操作(因为#ifndef __func__
无效):
#ifndef __func__
#define __func__ __FUNCTION__
#endif
Run Code Online (Sandbox Code Playgroud)
从C99规范:
6.4.2.2预定义标识符
1标识符
__func__
应由翻译者隐式声明,就像紧接每个函数定义的开头括号一样,声明Run Code Online (Sandbox Code Playgroud)static const char __func__[] = "function-name";
出现了,其中function-name是词法封闭函数的名称.
的__FUNCTION__
在MSVC编译器宏预先定义.你需要让它看起来像这样:
#ifndef _MSC_VER
#define __FUNCTION__ __func__
#endif
Run Code Online (Sandbox Code Playgroud)
或者相反,如果您愿意:
#ifdef _MSC_VER
#define __func__ __FUNCTION__
#endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24237 次 |
最近记录: |