为什么Visual C++ 2008在我(不小心)使用布尔类型时没有抱怨

Why does Visual C++ 2008 not complain when I (accidentally) use type boolean

本文关键字:类型 布尔 2008 C++ Visual 在我 不小心 为什么      更新时间:2023-10-16

我一直在做一些Java工作,所以错误地在cpp文件中创建了一个这样的函数:

inline boolean is_whatever() const { return type_ == whatever; }

它编译得很好。

然后,当我在 UNIX 上编译相同的代码时,它失败了:

error: `boolean' does not name a type

VS为什么不抱怨?

有没有我可以设置的标志来防止这种松懈?

boolean已经在您包含的其他标头中定义(直接或间接)。例如,如果您包含windows.h那么它会拉入许多其他标头,其中一些标头具有以下内容:

typedef unsigned char boolean;

如果这些标头中的任何一个包含在 cpp 文件中,则boolean将成为命名空间的一部分。 如果在Windows API中"修复"这个问题,那么成千上万的遗留项目将不再编译,开发人员将武装起来。 它的使用可能可以追溯到bool之前, C++ 中是一个具体的类型(还要记住,Windows API 是 C,而不是 C++)

使用布尔值

而不是布尔值,您将避免此类不便。

boolean不是

C++类型。也许某处有typedef bool boolean,但它不是内置类型。

请改用bool