我正在研究C语法分析程序。在运行C预处理器时,有一些库检查环境并使用#error
来停止编译。如何禁用它们,因为我只需要预处理步骤即可完成?
答案 0 :(得分:2)
为什么要禁用它们?他们输出错误并因某种原因停止编译。我知道禁用它们的唯一方法是修改源代码并将其删除。
答案 1 :(得分:0)
如果正在执行#error
预处理程序指令,则表示预处理已完成。
如果指令是有条件的(例如,只有满足某些条件时才会发出错误,例如在#ifdef SOME_MACRO
- #endif
块中),那么避免它的方法是确保相关条件不正确。
在{极为罕见的情况} #error
是无条件的,那么可能意图是立即停止预处理。而不是禁用它,解决方案是避免它(例如,不#include
执行该操作的文件)不禁用它。
如果您只想运行预处理器,那么#error
的存在没有任何区别。大多数编译器要么将预处理器作为单独的程序,要么有一个选项(例如“gcc -E”),导致编译在预处理阶段后停止。