token是在预处理后统计还是只在预处理过程中统计?
Are the tokens counted after pre-processing or during the process of pre-processing only?
在预处理期间,我们通常会扫描所有 macros
但我有点困惑,预处理器还会生成词法分析器实际获取的标记并进一步扫描输入文件,
我经历过这个link
并且提到Preprocessing token分为五大类类:identifiers, preprocessing numbers, string literals, punctuators, and other,所以token是否只在预处理状态下生成?
预处理的结果是标记流。
大多数标记是在宏扩展阶段之前生成的,但在宏扩展期间,可以使用字符串化 (#
) 和标记连接 (##
) 运算符创建新标记。
预处理后,很多token需要重新解析,有可能部分预处理后的token无法重新解析为有效token。例如,2.3G 是一个预处理数字标记,但它不对应于任何有效的数字标记。这将导致错误消息。
在预处理期间,我们通常会扫描所有 macros
但我有点困惑,预处理器还会生成词法分析器实际获取的标记并进一步扫描输入文件,
我经历过这个link 并且提到Preprocessing token分为五大类类:identifiers, preprocessing numbers, string literals, punctuators, and other,所以token是否只在预处理状态下生成?
预处理的结果是标记流。
大多数标记是在宏扩展阶段之前生成的,但在宏扩展期间,可以使用字符串化 (#
) 和标记连接 (##
) 运算符创建新标记。
预处理后,很多token需要重新解析,有可能部分预处理后的token无法重新解析为有效token。例如,2.3G 是一个预处理数字标记,但它不对应于任何有效的数字标记。这将导致错误消息。