我正在尝试在C程序中使用stdbool.h库文件。但是,当我尝试编译时,会出现一条错误消息,指出intellisense无法打开源文件stdbool.h。
任何人都可以建议我如何让视觉工作室认识到这一点?这个头文件是否有效?我正在读一本关于学习C编程的书。
答案 0 :(得分:26)
typedef int bool;
#define false 0
#define true 1
工作得很好。 Windows标题执行相同的操作。绝对没有理由担心通过在int
中存储两位值来消耗“浪费”的内存。
正如Alexandre在评论中提到的,微软的C编译器(与Visual Studio捆绑在一起)doesn't support C99并且可能不会。这很不幸,因为stdbool.h
和许多其他更有用的功能在C99中得到支持,但在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
答案 1 :(得分:13)
创建自己的文件来替换如下所示的stdbool.h:
#pragma once
#define false 0
#define true 1
#define bool int
在Visual Studio 2010中,我在其他地方使用typedef int bool;
时出现问题。 IntelliSense抱怨“类型说明符无效组合”。似乎“bool”这个名字仍然很特殊,即使它没有被定义。
答案 2 :(得分:2)
正如警告一样,在x64平台上,VS2017(我不确定以前的版本)将bool
定义为C ++上1字节的值(例如char
)。所以这个
typedef int bool;
如果你在C文件中使用它作为int
(4个字节),在C ++中使用它作为本地bool
(1个字节)(例如a struct
,那么可能非常危险.h
可能有不同的大小,具体取决于您使用C或C ++编译它。)