如果我问一个明显的问题,请原谅我,但经过一堆线程和尝试的东西,我无法确定这个简单的事情.
我有这个小程序:
#define FUNC_PREFIX __FUNCTION__ "() :"
int main()
{
printf("%s\n", FUNC_PREFIX);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我可以传递FUNC_PREFIX而不是__FUNCTION__记录函数,它们将打印调用函数名,后跟paren和冒号 - 这样可以提高日志行输出的可读性.
这在Visual Studio 2008中按原样编译.但是g++,在字符串常量之前,我得到一个错误')'
我做了一些像做的事情:
#define TEMP __FUNCTION__
#define FUNC_PREFIX TEMP "() :"
Run Code Online (Sandbox Code Playgroud)
但无济于事.
这样做的方法是什么?
Jon*_*ler 10
__FUNCTION__ 在标准C或标准C++中不是宏.
C++ 2011(§8.4函数定义和§8.4.1一般)和C 1999或2011都有一个预定义的标识符__func__,它是函数的名称.它不是宏,因此您无法在预处理器中将字符串与其连接.
因此,如果要使用不支持MSVS扩展的符合标准的C或C++编译器,则必须修改代码.
GCC手册(版本4.6.1)的第§6.47节函数名称为字符串.它__FUNCTION__是同义词的文件__func__.它还讨论了__PRETTY_FUNCTION__.这些不是预处理器宏.因此,您必须调整代码才能正常使用gcc或g++.
你的 printf 缺少引号。使用标识符__func__,如果将宏定义为:
#define FUNC_PREFIX __func__,"() :"
int main()
{
printf("%s %s\n", FUNC_PREFIX);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4626 次 |
| 最近记录: |