由于所学够用,因此工作后很多年没有专门去买本其他作者写的C语言相关的书。直至最近突发其想,买了《C Primmer Plus》回来,快速地阅读了一遍,学到了不少新的东西。因此,在本文及后期的文章中,我会将这些新的东西写一下供大家参考。本文主要介绍C99标准中新增加的_Bool类型。
在C89和C90标准中,不存在布尔类型。但是,实际工作中往往需要进行逻辑判断。C语言本身支持逻辑处理,即将结果为0视作fase,将非0值视作true。但是,如果我们希望在程序中定义变量来存放逻辑值。常见的做法是选取一个整数类型(如int),然后将其值设置为1或0来表示true或false。
int flag = 1; // true
if (flag) {
printf("真的!\n");
}
flag = 0; // false
if (!flag) {
printf("假的!\n");
}有的同学可能会使用宏定义来创建TRUE和FALSE,从而避免在程序中直接使用1和0.
#define TRUE 1
#define FALSE 0这种做法没有问题,直到现在仍然适用。不过,从C99标准开始,C语言终于针对这种类型的变量新增了_Bool类型。如此一来,我们就可以在项目中直接使用这种类型,而无需花时间采用上述方法。
和int等类型一样,_Bool类型是C编译器本身支持的类型。我们无需对工程做任何处理就可以使用。在实际项目中,为了更加方便地使用,可以在源文件中包含<stdbool.h>头文件。该头文件对_Bool类型添加了别名bool,同时增加了true和false两个宏的实现。
名称 | 作用 | 实际定义 |
|---|---|---|
bool | 布尔类型 | typedef _Bool bool |
true | 真 | #define true 1 |
false | 假 | #define false 0 |
也就是说,该头文件其实是对_Bool的“语法糖”。如果你不想使用stdbool.h,也可以自行实现。不过,既然已经有了,那为什么不直接使用现成的呢?如何使用bool类型下面给出了一个简单的示例,演示了如何使用bool类型。
#include <stdio.h>
#include <stdbool.h>
int main(void) {
bool is_ready = true;
bool has_error = false;
if (is_ready && !has_error) {
printf("系统准备就绪!🚀\n");
} else {
printf("系统未准备好。\n");
}
printf("is_ready = %d\n", is_ready);
printf("has_error = %d\n", has_error);
return 0;
}与使用int类型来表示布尔类型相比,上述代码的可读性更好、语义更清晰,我们可以通过is_read和has_error的类型来得知其表示逻辑值。
从上面的内容可以知,虽然C99引入了_Bool类型,并且我们可以通过包含<stdbool.h>从而能使用bool、true、false;但是,其具体的使用方法和效果与我们以前的方法没有太大区别。
即便如此,使用C99的该特性,倒是避免了我们自己重复造轮子,从而节省了工作量。
在后面的文章中,我会继续介绍《C Primmer Plus》中一些比较有意思的内容。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。