我正在尝试在C程序中使用stdbool.h库文件。然而,当我尝试编译时,会出现错误消息,说intellisense无法打开源文件stdbool.h。
请问有谁能指导我如何让Visual Studio识别此文件?这个头文件是否有效?我正在阅读一本学习C编程的书。
我正在尝试在C程序中使用stdbool.h库文件。然而,当我尝试编译时,会出现错误消息,说intellisense无法打开源文件stdbool.h。
请问有谁能指导我如何让Visual Studio识别此文件?这个头文件是否有效?我正在阅读一本学习C编程的书。
typedef int bool;
#define false 0
#define true 1
这个方法很好用。Windows头文件也是相同的。完全没有必要为在 int
中存储两位值而“浪费”的内存担心。
正如亚历山大在评论中提到的,微软的C编译器(捆绑在Visual Studio中)不支持C99,并且可能永远不会支持。这真是令人遗憾,因为C99中支持stdbool.h
和许多其他更有用的功能,但在Visual Studio中不支持。它停留在过去,只支持较旧的标准C89。我很惊讶你在试图在块的其它地方定义变量时没有遇到问题。每次我在VS中编写C代码时都会被困扰。
一个可能的解决方法是将Visual Studio配置为将代码编译为C++。然后你几乎可以使用C99书中的所有内容而无需担心编译器会出错。在C ++中,类型bool
是内置的(虽然在C模式下为4字节类型,但在C ++模式下为1字节类型)。要进行此更改,您可以在IDE内编辑项目的编译设置,或者只需将文件的扩展名更改为cpp
(而不是c
)。VS将自动设置编译模式。
现代版的Visual Studio(2013及更高版本)提供了对C99的改进支持,但仍不完整。老实说,如果您试图学习C(因此现在是C99),更好的解决方案就是选择另一个编译器。MinGW是在Windows上运行的好选择。许多人喜欢Code::Blocks IDE。
#ifdef
编译器指令中但未激活的部分变灰的功能。当您跟踪编译错误时,这非常有帮助。 - AaAsizeof(bool) == 1
。如果混合使用 C 和 C++ 代码,并在 C 侧将 bool 定义为 int,则会导致结构和 bool 数组出现有趣的问题。 - jpa创建您自己的文件来替换stdbool.h,文件应该如下所示:
#pragma once
#define false 0
#define true 1
#define bool int
在Visual Studio 2010中,我使用typedef int bool;
时遇到了问题,正如其他地方建议的那样。IntelliSense会抱怨"类型说明符的组合无效"。似乎"name"bool"仍然是特殊的,即使它没有被定义。
需要提醒的是,在x64平台上,VS2017(之前的版本我不确定)将bool
定义为C++中1字节的值(例如,一个char
)。所以这段代码
typedef int bool;
如果在C文件中使用作为int
(4个字节),并在C++中使用作为本地bool
,可能非常危险(例如,在.h
中的struct
编译时大小可能会因为使用不同的语言而有所不同)。