试图在VS 2010 </stdbool.h>中使用'#include <stdbool.h>'

时间:2011-12-17 22:52:02

标签: c visual-studio visual-studio-2010

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

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

3 个答案:

答案 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 ++编译它。)