c - token 是在预处理之后计数还是仅在预处理过程中计数?

标签 c compiler-construction

在预处理期间,我们通常会扫描所有,但我有点困惑,预处理器是否还生成词法分析器实际获取的标记,并进一步扫描输入文件,

我经历过这个link 其中提到预处理标记分​​为五大类:标识符、预处理数字、字符串文字、标点符号等,那么标记是否仅在预处理状态下生成?

最佳答案

预处理的结果是 token 流。

大多数 token 是在宏扩展阶段之前生成的,但在宏扩展期间,可以使用 stringify ( # ) 和 token-concatenate ( ## ) 运算符创建新 token 。

预处理后,很多token需要重新分析,并且有可能某些预处理token无法重新分析为有效token。例如,2.3G是一个预处理数字标记,但它不对应于任何有效的数字标记。这将导致错误消息。

关于c - token 是在预处理之后计数还是仅在预处理过程中计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34101633/

相关文章:

c - 从二进制文件中读取 4 字节日期(大端)

java - 实例化自己的类时编译器如何处理Main

c - 在C中初始化链表中的变量

iphone - glReadPixels 不适用于 iPhone

c++ - POSIX 线程在 C 中没有产生加速

c++ - 使用 libpng 将 OpenGL 屏幕像素保存为 PNG

c - 使用一行二维数组作为参数来运行

c - 在 c 中,控制编译器如何将相同字符串合并到可执行文件中的规则是什么

javascript - 是否有免费/开源的 JavaScript 到 JavaScript 压缩编译器(如 Google 的)?

c# - C# 编译器如何区分抽象方法的具体子类实现和抽象基类中的重载?