试图在VS 2010中使用’#include ‘

我正在尝试在C程序中使用stdbool.h库文件。 但是,当我尝试编译时,会出现一条错误消息,指出intellisense无法打开源文件stdbool.h。

任何人都可以建议我如何让视觉工作室认识到这一点? 这个头文件是否有效? 我正在读一本关于学习C编程的书。

 typedef int bool; #define false 0 #define true 1 

工作得很好。 Windows标题执行相同的操作。 绝对没有理由担心通过在int存储两位值而消耗的“浪费”内存。

正如Alexandre在评论中提到的,微软的C编译器(与Visual Studio捆绑在一起) 不支持C99 ,可能不会。 这很不幸,因为在C99中支持stdbool.h和许多其他更有用的function,但在Visual Studio中则不支持。 它一直停留在过去,仅支持称为C89的旧标准。 我很惊讶你没有遇到一个问题,试图在块的开头以外的地方定义变量。 每次我在VS中编写C代码时都会咬我。

一种可能的解决方法是将Visual Studio配置为将代码编译为C ++。 那么你在C99书中读到的几乎所有东西都可以在没有编译器窒息的情况下工作。 在C ++中,类型bool是内置的(尽管它在C ++模式下是1字节类型,而不是像C模式中的4字节类型)。 要进行此更改,您可以在IDE中编辑项目的编译设置,或者只需将文件重命名为cpp扩展名(而不是c )。 VS将自动相应地设置编译模式。

现代版本的Visual Studio(2013及更高版本)为C99提供了改进的支持,但仍然不完整。 老实说,如果您正在尝试学习C(现在是C99),那么更好的解决方案就是选择不同的编译器。 如果您在Windows上运行, MinGW是一个不错的选择。 很多人喜欢Code :: Blocks IDE

创建自己的文件来替换如下所示的stdbool.h:

 #pragma once #define false 0 #define true 1 #define bool int 

在Visual Studio 2010中,我遇到了使用typedef int bool;的问题typedef int bool; 正如别处所说。 IntelliSense抱怨“类型说明符的组合无效”。 似乎“bool”这个名字仍然很特别,即使它没有定义。

正如警告一样,在x64平台上,VS2017(我不确定以前的版本)将bool定义为C ++上的1字节值(例如char )。 所以这

 typedef int bool; 

如果你在C文件中使用它作为int (4个字节)并在C ++中使用它作为一个本机bool (1个字节)(例如.hstruct可能有不同的大小,这取决于你用C或C ++编译它可能真的很危险)。