Joh*_*itb 7 c++ c-preprocessor
规范说在编译的第1阶段
不在基本源字符集(2.3)中的任何源文件字符将替换为指定该字符的通用字符名称.
在第四阶段,它说
执行预处理指令,扩展宏调用
在第5阶段,我们有
字符文字或字符串文字中的每个源字符集成员,以及字符文字或非原始字符串文字中的每个转义序列和通用字符名称,都将转换为执行字符集的相应成员
对于#运营商,我们有
一个
\字符的每个之前插入"和\字符的字符文字或文字串(包括界定的"字符).
因此我进行了以下测试
#define GET_UCN(X) #X
GET_UCN("€")
Run Code Online (Sandbox Code Playgroud)
使用UTF-8的输入字符集(匹配我的文件的编码),我期望以下#X操作的预处理结果:"\"\\u20AC\"".GCC,Clang和boost.wave不会将其€转换为UCN而是产生"\"€\"".我觉得我错过了什么.你能解释一下吗?
Fra*_*yne -2
我怀疑你会发现欧元符号不满足条件Any source \xef\xac\x81le character not in the basic source character set,因此您引用的其余文本不适用。
使用您最喜欢的二进制编辑器打开测试文件,然后检查用于表示欧元符号的值GET_UCN("\xe2\x82\xac")