c - 预处理标记:'- -' vs. '--'
问题描述
为什么 (GCC) 预处理器在以下示例中创建两个令牌- -B
而不是一个?--B
前者应该正确而不是后者的逻辑是什么?
#define A -B
-A
输出依据gcc -E
:
- -B
毕竟--
是一个有效的操作符,所以理论上也是一个有效的token。
这是特定于 GCC 预处理器还是遵循 C 标准?
解决方案
预处理器处理令牌,而不是字符串。没有宏替换##
不能创建新的标记,因此,如果预处理器输出到文本文件而不是直接进入编译器,预处理器会插入空格,以便输出的文本文件可以再次用作 C 输入而不改变语义。
空间插入似乎不在标准中,但是标准将预处理器描述为处理标记并将其输出提供给适当的编译器,而不是文本文件。
推荐阅读
- sql - pyspark CASE 用多个 where 子句替换空值
- sql - 如何使用 UNION 查询将相似的项目合二为一
- python - 使用热图颜色在图像上绘制边界框注释
- excel - 如何返回数组中的第一个非错误值?
- javascript - 开玩笑 vue.js 单元测试抛出 TypeError: 'set' on proxy: 陷阱为属性 'hasOwnProperty' 返回了错误
- macos - 在 Mac 上复制时保持创建时间戳
- r - 如何在 ggsurvplot 中改变颜色和线型?
- typescript - Vuex 模块装饰器:如何访问模块内的存储
- linux - Linux 变量未在整个循环中重置的问题
- sql - VBA - 使用递归从 JSON 创建 MSAccess 关系表