c++ - 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 == "a\tc" ?
解决方案
查阅C++ 标准(草案)的部分[cpp.stringize]告诉我们:
字符串化参数的预处理标记之间每次出现的空格都会成为字符串文字中的单个空格字符。删除第一个预处理标记之前和包含字符串化参数的最后一个预处理标记之后的空白。
鉴于: <TAB>a<TAB>c<TAB>
,第一条规则意味着我们将拥有" a c "
,但第二条规则意味着我们将删除前导和尾随空格,"a c"
如您所见。
推荐阅读
- spring-boot - Liquibase Gradle 插件的 url 和 referenceUrl 似乎颠倒了
- react-native - 安全密码字段在发布时不受保护
- c++ - 定义子类构造函数时使用花括号调用基类构造函数?
- c# - 将预制件作为游戏对象的子对象统一生成
- directshow - GMFBridge DirectShow 滤镜 SetLiveTiming 效果
- java - 覆盖功能区服务器列表以从领事获取主机名列表
- javascript - Firebase 云消息传递每个 then() 都应该返回一个值或抛出 promise/always-return
- python-3.x - 如果响应条件,boto3 无法执行
- python - 用大图像重新训练 MobileNet
- java - 为什么 Espresso 不等待实际观看条件?