C++ C++;:在c字符串中追加uu PRETTY_函数

C++ C++;:在c字符串中追加uu PRETTY_函数,c++,gcc,c-preprocessor,C++,Gcc,C Preprocessor,我试图在编译时将\uu PRETTY\u FUNCTION\uu附加到c字符串前缀。但它无法编译。然而,如果我使用\uuuuu文件\uuuuuu执行此操作,则不会失败 const char* s1= "Prefix" __FILE__; // works const char* s2= "Prefix" __PRETTY_FUNCTION__; // compilation error error: expected ',' or ';' before '__PRETTY

我试图在编译时将
\uu PRETTY\u FUNCTION\uu
附加到c字符串前缀。但它无法编译。然而,如果我使用
\uuuuu文件\uuuuuu
执行此操作,则不会失败

const char* s1= "Prefix" __FILE__;            // works
const char* s2= "Prefix" __PRETTY_FUNCTION__; // compilation error

error: expected ',' or ';' before '__PRETTY_FUNCTION__'
const char* s2 = "Prefix" __PRETTY_FUNCTION__;
                          ^~~~~~~~~~~~~~~~~~~
我正在使用gcc和clang。 我遗漏了什么吗?

来自GCC:

[
\uuuu func\uuuu
\uuu PRETTY\u FUNCTION\uuuu
]是变量,不是预处理器宏,不能用于初始化字符数组或与字符串文字连接

根据C标准,
\uuuuuuuuuuuuuuuu
是字符串文字:

\uuuuuuuuuuuuu文件
当前源文件的假定名称(字符串文字)

类似的语言可在的16.8预定义宏名称的第1段中找到

鉴于,per
\uuuu func\uuuu
是一个标识符:

标识符
\uuuu func\uuuu
应由翻译人员隐式声明 好像,紧接着每个函数的开始括号 定义,宣言

      static const char __func__[] = "function-name";
第8.4.1条概述第8段:

函数局部预定义变量
\uuuu func\uuu
定义为 表格的定义

    static const char __func__[] = "function-name";
已经提供,在哪里 函数名 是实现定义的字符串。目前尚不清楚是否存在这种情况 变量的地址不同于程序中任何其他对象的地址


假设GCC扩展名
\uuuuu PRETTY\u函数
作为标准的
\uuuu func\uuuuu
实现,作为实际标识符,它不能与字符串文字连接。

错误是什么?@NathanOliver错误:预期为','或';'在'PRETTY_FUNCTION'const char*s2=“Prefix”PRETTY_FUNCTION之前^~~~~~~~~~~~~~~~~~~@艾迪:我已经把你的评论贴到问题上了,但我不得不猜测一下格式。请查收。(请在问下一个问题时自己回答)@MSalters谢谢hanks@Andrew HenleThank you@GPhilo