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

Joh*_*ohn 23 c visual-studio-2010 visual-studio

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

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

Cod*_*ray 26

typedef int bool;
#define false 0
#define true 1
Run Code Online (Sandbox Code Playgroud)

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

正如Alexandre在评论中提到的,微软的C编译器(与Visual Studio捆绑在一起)不支持C99,可能不会.这很不幸,因为stdbool.hC99支持许多其他更有用的功能,但在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

  • 请注意,在 Visual C++ 的 C++ 模式中,“sizeof(bool) == 1”。如果混合 C 和 C++ 代码,在 C 端将 bool 定义为 int 将导致结构和 bool 数组出现有趣的问题。 (2认同)

che*_*rno 13

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

#pragma once

#define false   0
#define true    1

#define bool int
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2010中,我使用typedef int bool;其他地方建议的问题.IntelliSense抱怨"类型说明符无效组合".似乎"bool"这个名字仍然很特别,即使它没有定义.