我试图在C ++中连接__ func__和文字字符串,我在GCC上遇到错误(有或没有C ++ 11标准)。比如,例如,这里:
#include <cstdio>
int main(void)
{
printf("%s", __func__ " try #1\n");
printf(__func__ " try #2\n");
return 0;
}
看起来__ func__实际上不是字符串文字宏。有谁知道为什么会这样,也许是解决它的方法?
答案 0 :(得分:5)
__func__
确实既不是字符串文字,也不是宏。它的C ++ 11 8.4.1 / 8规范是
函数本地预定义变量
__func__
被定义为表单的定义
static const char __func__[] = "function-name ";
已提供
因此,您必须将其视为静态数组,而不是字符串文字;特别是,你不能将它与其他文字连接起来。
printf("%s%s", __func__, " try #1\n");
printf("%s try #2\n", __func__);
std::string message = __func__ + std::string(" try #3");
答案 1 :(得分:3)
从技术上讲,__func__
是预定义标识符。它是从不实现为宏。
它的类型为static const char __func__[]
,因此您无法以您的方式连接它。当然,您可以将其添加到std::string
。
使用
printf("%s try #1\n", __func__);
代替。