c++ - 为什么当我(不小心)使用 bool 类型时 Visual C++ 2008 不报错

标签 c++ visual-studio-2008

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

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

它编译得很好。

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

error: `boolean' does not name a type

为什么 VS 不报错?

我可以设置一个标志来防止这种松懈吗?

最佳答案

碰巧 boolean 已在您包含(直接或间接)的其他一些 header 中定义。例如,如果您包含 windows.h,则会引入许多其他 header ,其中一些 header 具有以下内容:

typedef unsigned char boolean;

如果这些 header 中的任何一个包含在您的 cpp 文件中,则 boolean 将成为命名空间的一部分。如果这在 Windows API 中被“修复”,那么数以千计的遗留项目将不再编译,开发人员将奋起反抗。它的使用可能可以追溯到 bool 成为 C++ 中的具体类型之前(还要记住 Windows API 是 C,而不是 C++)

关于c++ - 为什么当我(不小心)使用 bool 类型时 Visual C++ 2008 不报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066007/

相关文章:

c++ - 获取变体的值,它本身可能是另一个变体

c++ - 如何从 Qt4 传递 OpenGL 上下文?

winforms - .NET/Visual Studio 编辑器中的相对控件位置

sql - 将此 sql 语句更正为 Insert into、select、delete

python - OpenCV 3.4.1错误readNetFromTensorflow无法在cv::dnn::ReadProtoFromBinaryFile中打开.pb

c++ - g++ 错误 : ‘malloc’ was not declared in this scope

c++ - 从 Linux OMI (omicli) 到 Windows WMI 的连接失败并出现 DMTF 相关错误

c - 在纯 C 中加密字符串以便将它们隐藏在可执行文件中

c - 用于字母数字的 flex RE 也会打印 #$@

c# - 是否有我可以添加到类中的属性,以便将其作为代码而不是在设计器中进行编辑?