我们知道c有表示是真的还是假的专用bool类型。 但是c语言没有那样的类型(至少我是这么想的)。 表达式的值为0是假,非0是真。 所以条件判断语句(if(…)、while(…) () ) () ) )非常灵活,即使只有一个指针类型也成为条件式。
为了使过程更清晰,我们经常给出以下宏观定义。
类型在球;
#定义真1
#define FALSE 0
这是最常见的写法,任何c语言编译器都允许。
今天,我在一个程序中看到了这样的行#include。 这个陌生的头文件在std上也走在前列,也和bool有关,引起了我的警惕,很快百度的。 我知道这是在C99标准中添加的头文件,其目的是引入bool类型以与c兼容。 然后,我查看了这个头文件的源代码。 内容如下。
/*
* ISOC标准:7.16 booleantypeandvalues
*/
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#定义真1
#define false 0
#else /* __cplusplus */
/* supportingincisagccextension.* /
#define _Bool bool
#定义布尔布尔
#定义假假
#定义真
#endif /* __cplusplus */
/* signalthatallthedefinitionsarepresent.* /
# define _ _ bool _ true _ false _ are _ defined 1
#endif /* stdbool.h */
此头文件既短又清晰,但我对类型_Bool感兴趣。 再看百度,发现这是C99标准引入的新关键词。 是的,不是宏的定义而是关键字。 也不是特种兵。 sizeof(_bool ); 如果该类型占用一个字节,并且给该类型的变量一个除0以外的整数值,你知道该值是1,意味着他不是其他整数类型的别名。
那么,其实我只能说,c语言不是没有布尔型,而是在C99标准以前没有。 现在,如果在源文件中包含名为stdbool.h的头文件,则可以在c语言中使用bool类型,就像c一样。
所以如果是C99以前的标准,就需要自己定义bool。 例如
typedef enum {false=0,true=1} bool;
现在,让我们来看看c语言的定义。
1.FALSE/TRUE与false/true的区别: false/true是用标准c语言添加的新关键字,false/true通过#define。 这需要用途
解决了程序在c和c中的环境差异,以下是windef.h中对FALSE/TRUE的定义:
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#定义真1
#endif
也就是说,FALSE/TRUE是int类型,FALSE/TRUE是bool类型。 所以两者不同,只是
我们在使用中没有这种感觉。 因为c会给我们做隐式转换。
2.BOOL大小和BOOL的区别:因为BOOL在c中占用1个字节,但BOOL是int类型,int类型的大小因具体环境而异
对我来说,false/true只占用一个字节,但TRUE/FALSE根据具体环境的不同,以下在windef上有BOOL
. h中的定义: typedef int BOOL;
3 .空值与0的区别:还是看看windef.h中空值的定义吧:
#ifndef NULL
#ifdef __cplusplus//这指示用c编译程序
#定义空值0
#else
#定义空值((void * )0) ) )。
#endif
#endif
所以,它们没有区别。 但是,在c中进行强制的类型转换。
时间: 2015-11-15