是否可以关闭 gcc 中对“and”/“or”布尔运算符使用的支持?

问题描述 投票:0回答:4

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

理想情况下,我们都会记得使用适当的语法,但对于那些我们偶尔会搞砸的情况,如果 GCC 不放过它,那就太好了。有人对此有什么想法吗?

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

c++ gcc syntax boolean
4个回答
22
投票

它们是 C++ 标准的一部分,例如参见 这个 StackOverflow 答案(引用了标准的相关部分)。

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

要在 GCC 中禁用它们,请使用

-fno-operator-names
。请注意,这样做实际上会切换到 C++ 的非标准方言,并且最终可能会编写出可能无法在符合标准的编译器上正确编译的代码(例如,如果您声明具有通常保留的名称的变量)。


7
投票

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

如果包含标题

<iso646.h>
,这些单词在 C 语言中是标准的。

MSVC 不支持标准,对您没有任何服务。

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


0
投票

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


-4
投票
除其他 gnu 主义外,

-pedantic-errors
可能对此有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.