C ++ Concatinating __func__和const char literal

时间:2014-12-04 13:57:25

标签: c++ function macros

我试图在C ++中连接__ func__和文字字符串,我在GCC上遇到错误(有或没有C ++ 11标准)。比如,例如,这里:

#include <cstdio>

int main(void)
{
        printf("%s", __func__ " try #1\n");
        printf(__func__ " try #2\n");
        return 0;
}

看起来__ func__实际上不是字符串文字宏。有谁知道为什么会这样,也许是解决它的方法?

2 个答案:

答案 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__);

代替。