C++ Concatinating __func__和const char literal

Lap*_*try 0 c++ macros function

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

#include <cstdio>

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

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

Mik*_*our 5

__func__确实既不是字符串文字,也不是宏.它的规范来自C++ 11 8.4.1/8

函数本地预定义变量__func__定义为表单的定义

static const char __func__[] = "function-name ";
Run Code Online (Sandbox Code Playgroud)

已经提供

因此,您必须将其视为静态数组,而不是字符串文字; 特别是,你不能将它与其他文字连接起来.

printf("%s%s", __func__, " try #1\n");
printf("%s try #2\n", __func__);
std::string message = __func__ + std::string(" try #3");
Run Code Online (Sandbox Code Playgroud)