stringify运算符如何扩展TABS?

GCC 似乎总是按空格扩展源代码中的选项卡。它保留表达式内的空间。标准对此有何规定?

例如,c这个例子中将包含的内容(<TAB>代表t源代码文件中的一个文字字符)。

#define X(a) #a

const char* c = X(<TAB>a<TAB>c<TAB>);
// c == "a c" ? (looks like what gcc does)
// c == "atc" ?

回答

查阅 C++ 标准(草案)的部分[cpp.stringize]告诉我们:

字符串化参数的预处理标记之间出现的每次空格都会成为字符串文字中的单个空格字符。删除第一个预处理标记之前和包含字符串化参数的最后一个预处理标记之后的空白。

鉴于:<TAB>a<TAB>c<TAB>,第一条规则意味着我们有" a c ",但第二条规则意味着我们将删除前导和尾随空格,"a c"如您所见。


以上是stringify运算符如何扩展TABS?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>