【发布时间】:2014-12-04 13:57:24
【问题描述】:
我正在尝试在 C++ 中连接 __ func__ 和文字字符串,但在 GCC 上出现错误(有或没有 C++11 标准)。例如,这里:
#include <cstdio>
int main(void)
{
printf("%s", __func__ " try #1\n");
printf(__func__ " try #2\n");
return 0;
}
看起来 __ func__ 实际上不是字符串文字宏。有谁知道为什么会发生这种情况,也许还有解决方法?
【问题讨论】:
-
当然
__func__不是一个哑字符串宏。只是“%s%s”有什么问题?还有使用正确的 C++ 工具有什么问题,比如std::string和std::cout? -
@Griwes “当然”?考虑到
__FILE__和__LINE__是 宏,我可以理解为什么 OP 可能会认为__func__也是。 -
printf("%s try #1\n", __func__ )有什么问题?您尝试执行的编译时连接类型仅适用于字符串文字(即常量字符串)。 -
@hvd 当然“当然”。预处理器不可能知道它当前是什么函数(但它确实知道它正在处理什么行或文件)。
-
@Griwes 许多编译器都集成了预处理器,有些确实提供了类似于
__func__的东西,除了宏。在至少一个编译器上,printf("We're now in " __FUNCTION__ "\n");编译没有任何问题。