我们在代码中使用了一些在今天的标准中无效的指令。 例如。 #注释1
这曾经用于非常旧版本的gcc(2.x)。我试图把它移到新的gcc(4.x)但是我得到的错误如下: “错误:无效的预处理指令#COMMENT1”
简单的解决方法是在这些指令中将#更改为//,但由于某些其他依赖项,我们无法做到这一点。
问题是,有没有办法告诉cpp忽略这些无效的指令?
然而,它应该解释有效的指令,例如#ifndef #define etc
谢谢!
答案 0 :(得分:2)
你没有说你为什么
不能在这些指令中将#改为//
我猜你有一些工具或脚本取决于它们。您应该更新这些以遵循当前标准。
也许更独特或不可能的后缀可能会对您有所帮助,例如使用//#COMMENT
代替#COMMENT
但实际上,您要求一个或多或少标准的符合标准的编译器来理解非标准和已弃用的语言功能,这基本上是没有希望的。
或者,您可以修补最近的GCC源代码(例如GCC 4.6 one)以满足您的要求,但我认为这不是一个好主意(甚至GCC 4.6的插件功能也没有帮助,因为在其预处理器中没有插件挂钩)。
我的建议仍然是更改源代码以更符合当前标准。这几乎不是时间损失。
答案 1 :(得分:0)
我收到了这些错误(g ++ 4.5.4),因为预处理器关键字区分大小写。
#DEFINE _HEADER_FILE_
#ENDIF
会失败,而
#define _HEADER_FILE_
#endif
会通过。 巴西尔说得很好。了解更新的编译器标准是值得的。
答案 2 :(得分:0)
在linux上,cpp有一个标志,试图模仿传统的C风格预处理器
来自cpp手册页:
-traditional-cpp
Try to imitate the behavior of old-fashioned C preprocessors, as opposed to ISO C preprocessors.