【发布时间】:2020-10-12 10:16:18
【问题描述】:
当我在 C 语言中出现语法错误时,我如何知道它是预处理器错误还是编译器错误?
假设我输入这一行:"# include header.h"(" 是该行的一部分,使其成为字符串文字)。
预处理器会出现问题,还是编译器会将其视为字符串而不将其分配给任何东西?
【问题讨论】:
-
你只能用
gcc -E运行预处理器(如果使用gcc),看看有没有问题 -
通常从错误消息中可以很清楚地看出它是否是预处理问题,但如果你不确定你总是可以按照 Eugene 的建议在预处理后停止。那肯定会告诉你。
-
编译器为什么要把它当作字符串处理?字符串文字由
"包围。在本例中,"是否计入该行或只是为了强调该行? -
@P__J__ 通常是因为找不到头文件,或者宏的参数数量错误,或者没有
#if的#else。有很多例子,它们通常是非常明显的预处理问题。 -
“预处理器会出现问题,还是编译器会将其视为字符串而不将其分配给任何东西?” - 当您尝试时发生了什么?
标签: c string compiler-construction c-preprocessor preprocessor