c - 编译期间 C 中何时需要空格(或括号)?
问题描述
我正在学习编译是如何工作的,我的最终目标是编写一个迷你 C 编译器。我还处于这个项目的开始阶段。当我在构建 AST 的扫描器和解析器部分工作时,我意识到在 、 、 或 等表达式中需要空格(i+ +4
或i+(+4)
括号i- -4
)i-(-4)
。否则,在i--4
表达式(例如)中,--
被解释为一元运算符--
并引发错误。我完全理解其中的原因。这不是问题。
问题如下,之前,我天真地认为空格在 C 中并不那么重要,如果只是出于代码可读性的考虑。但是现在,我想知道是否还有其他类似上述论文的例子?
解决方案
我不得不修复一些旧代码并进行更改
#define ALT_7 (0xfe+OFFSET)
至
#define ALT_7 (0xfe +OFFSET)
原因是这0xfe+OFFSET
是一个预处理数字标记,而不是人们可能天真的认为的三个标记。旧的编译器将其解析为 3,但新的编译器将其解析为无效的数字常量而失败。
预处理器方面可能还有更多内容,但它更加模糊(作为 C/C++ 预处理的整个主题)。
推荐阅读
- javascript - 如何在 JavaScript 中单击按钮
- python - 尝试使用 PiCAN2 和树莓派记录 CAN 数据时未找到数据
- mysql - MYSQL 计算列上的所有大小写
- c++ - 在c++程序下运行
- python - docker 上的内存使用量在容器 timeoutErrors 上达到峰值
- mongodb - 将 shell 变量传递给 mongodb 脚本
- r - 无法使用 install.packages
- python - 微调 T5 以使用 HuggingFace 进行汇总时出现关键错误
- javascript - 从一个客户端发送数据的 Web 套接字
- docker - 在 VSCode 远程容器会话中覆盖 UID GID