C 预处理器:如何禁用#error 宏?

C preprocessor: How can I disable #error macro?

我正在开发一个 C 语法分析程序。虽然 运行 C 预处理器,但有些库会检查环境并使用 #error 停止编译。我怎样才能禁用它们,因为我只需要完成预处理步骤?

为什么要禁用它们?他们正在输出错误并出于某种原因停止编译。我知道禁用它们的唯一方法是修改源代码并删除它们。

如果正在执行 #error 预处理器指令,则表示预处理已完成。

如果指令是有条件的(例如,仅当满足某些条件集时才会发出错误,例如在 #ifdef SOME_MACRO - #endif 块中)那么避免它的方法是确保相关条件不成立。

#error 是无条件的(极其罕见的)情况下,可能是为了立即停止预处理。解决方案不是禁用它,而是避免它(例如,不是 #include 执行该操作的文件)而不是禁用它。

如果您只想 运行 预处理器,那么 #error 的存在没有任何区别。大多数编译器要么将预处理器作为单独的程序,要么有一个选项(例如 "gcc - E")导致编译在预处理阶段后停止。