在 C 中使用 bool 类型需要包含哪个头文件?

问题描述 投票:0回答:6

这是我迄今为止包含的所有 .h 文件,但没有

bool
的定义:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <pthread.h>
#include <netdb.h>
#include <fcntl.h>
#include <unistd.h>
#include <event.h>

哪个文件定义了

bool

c boolean
6个回答
46
投票

它是 C99 的一部分,并在 POSIX 定义 stdbool.h 中定义。


46
投票

#include <stdbool.h>

供像我这样的人复制和粘贴。


18
投票

bool
只是一个扩展为 _Bool
 的宏。您可以使用 
_Bool
 而不使用 
#include
,就像使用 
int
double
 一样;这是一个 C99 关键字。

该宏与其他 3 个宏一起在

<stdbool.h>

 中定义。

定义的宏是

  • bool
    :宏扩展为 
    _Bool
    
    
  • false
    :宏扩展为 
    0
    
    
  • true
    :宏扩展为 
    1
    
    
  • __bool_true_false_are_defined
    :宏扩展为 
    1
    
    

1
投票

C99 标准 stdbool


C99 N1256 标准草案 7.16“布尔类型和值<stdbool.h>

”说:

1 标题

<stdbool.h>

定义了四个宏。

2 宏

bool

 扩展为 
_Bool

3 其余三个宏适合在

#if

 预处理指令中使用。他们是

true
扩展到整数常量 1,

false
扩展到整数常量 0,并且

_ _bool_true_false_are_defined
扩展到整数常量 1。

4 尽管有 7.1.3 的规定,程序仍可以取消定义,然后可能重新定义宏 bool、true 和 false。222)

一个关键的见解是,名称

bool

true
false
 需要标题,因为它们不是保留的,因为它们不以下划线开头。但 
_Bool
 是一个保留标识符,因此他们可以将其添加到 C99 中,而不需要新的标头。

然后6.2.5“类型”定义了

_Bool

2 声明为类型

_Bool

 的对象足够大,可以存储值 0 和 1。

变更集摘要部分“前言”中说明了它是在 C99 中添加的事实

5 第二版取消并取代第一版 ISO/IEC 9899:1990,经 ISO/IEC 9899/COR1:1994、ISO/IEC 9899/AMD1:1995 和 ISO/IEC 9899/COR2 修订和更正: 1996年。与上一版本相比的主要变化包括:

[...]

  • 中的布尔类型
相关:

  • 在 C 中使用布尔值
  • bool 是原生 C 类型吗?

0
投票
如果您已指示编译器使用 C23 语言标准(并且您的编译器支持该语言标准),则无需包含任何标头。从 C23 开始,

true

false
 是语言关键字 - 预定义的布尔常量。

否则,你需要

#include <stdbool.h>

另请参阅

https://en.cppreference.com/w/c/language/bool_constant


-8
投票
在代码中尝试这个头文件

stdbool.h

这一定有用

© www.soinside.com 2019 - 2024. All rights reserved.