是否可以在gcc中关闭对“和”/“或”布尔运算符用法的支持?

时间:2009-07-01 14:15:55

标签: c++ gcc compiler-construction syntax boolean

GCC似乎允许使用“和”/“或”而不是“&&” /“||”在C ++代码中;但是,正如我所料,许多编译器(特别是MSVC 7)不支持这一点。 GCC允许这样做的事实给我们带来了一些烦恼,因为我们有不同的开发人员在多个平台上处理相同的代码库,偶尔,当人们在Python和C ++开发之间来回切换时,这些“错误”会随之而来。 / p>

理想情况下,我们都会记得使用适当的语法,但对于我们偶尔会搞砸的情况,如果GCC不让它滑动,那将是非常好的。有人对此采取何种方法?

如果“and”和“or”只是#defines,那么在使用GCC时我可以#undef,但我担心它更可能在更基础的层次上内置到编译器中。

感谢。

4 个答案:

答案 0 :(得分:17)

它们是C ++标准的一部分,例如参见this StackOverflow answer(引用标准的相关部分)。

同一问题的另一个答案提到了如何做相反的事情:让它们在MSVC中工作。

要在GCC中停用它们,请使用-fno-operator-names。请注意,通过这样做,您实际上是切换到C ++的非标准方言,并且存在最终编写可能无法在符合标准的编译器上正确编译的代码的风险(例如,如果您声明了通常保留名称的变量。

答案 1 :(得分:7)

这些单词在C ++中是标准的,不包含任何标题。

如果包含标题<iso646.h>,则单词在C中是标准的。

MSVC通过不支持标准为您提供服务。

但是,您可以使用工具强制不使用关键字。它可以作为编码指南,您可以快速培训您的团队,不要犯愚蠢的可移植性错误。避免这个问题并不难。

答案 2 :(得分:0)

您是否考虑过任何代码分析工具?类似于FxCop的东西?使用FxCop,您可以编写自己的规则(检查&amp;&amp;),然后将其设置为在预编译阶段运行。

答案 3 :(得分:-3)

-pedantic-errors可能有助于此,以及其他gnu-isms。