BOOL 和bool

一:在网上找到了BOOL和bool的区别:

1、类型不同

BOOL为int型

bool为布尔型

2、长度不同

bool只有一个字节

BOOL长度视实际环境来定,一般可认为是4个字节

3、取值不同

bool取值false和true,是0和1的区别

BOOL取值FALSE和TRUE,是0和非0的区别

二:

bool是标准C++数据类型,可取值true和false。单独占一个字节,

如果数个bool对象列在一起,可能会各占一个bit,这取决于编译器。

BOOL是微软定义的typedef int BOOL。与bool不同,它是一个三值逻辑

TRUE/FALSE/ERROR,返回值为>0的整数为TRUE,0为FALSE,-1为ERROR。

Win32 API中很多返回值为BOOL的函数都是三值逻辑。比如GetMessage

().

三:

大BOOL和小bool之间的区别:

1、类型不同

BOOL为int型

bool为布尔型

2、长度不同

bool只有一个字节

BOOL长度视实际环境来定,一般可认为是4个字节

3、取值不同

bool取值false和true,是0和1的区别

BOOL取值FALSE和TRUE,是0和非0的区别

4、例子

bool x=3;  //告警

bool x=1;  //正确

BOOL x=3;  //正确

BOOL x=3.3;  //告警

注:windows为了兼容问题定义的基础变量。

typedef unsigned long       DWORD;

typedef int                 BOOL;

typedef unsigned char       BYTE;

typedef unsigned short      WORD;

typedef float               FLOAT;

typedef FLOAT               *PFLOAT;

typedef BOOL near           *PBOOL;

typedef BOOL far            *LPBOOL;

typedef BYTE near           *PBYTE;

typedef BYTE far            *LPBYTE;

typedef int near            *PINT;

typedef int far             *LPINT;  //   maximum   heap   size

 

  );  

5.

二、布尔型变量bool

  bool是布尔型变量,也就是逻辑型变量的定义符,类似于float,double等,只不过float定义浮点型,double定义 双精度浮点型。 在objective-c中提供了相似的类型BOOL,它具有YES值和NO值。
  布尔型变量的值只有 真 (true) 和假 (false)。
  布尔型变量可用于逻辑表达式,也就是“或”“与”“非”之类的逻辑运算和大于小于之类的关系运算,逻辑表达式运算结果为真或为假。
  bool可用于定义函数类型为布尔型,函数里可以有 return TRUE; return FALSE 之类的语句。
  布尔型运算结果常用于条件语句,
  if (逻辑表达式)
  {
  如果是 true 执行这里;
  }
  else
  {
  如果是 false 执行这里;
  };
  三、关于bool的小例子
  (1)
  #include<iostream>
  using namespace std;
  int main()
  {
  bool b =1; //执行此行后,b=1(true)
  if(b)
  cout << "ok!" << endl;
  b = b-1; //执行此行后,b=0(flase)
  if(b)
  cout << "error!" <<endl;
  return 0;
  }
  运行结果:OK!
  (2)
  #include<iostream>
  using namespace std;
  int main()
  {
  bool b =1; //执行此行后,b=1(true)
  if(b)
  cout << "ok!" << endl;
  b = b+1; //执行此行后,b=1(true)
  if(b)
  cout << "error!" <<endl;
  return 0;
  }
  运行结果:OK!
  error!
  若想更了解的话,读者可以在定义b时改成 bool b=0;看看运行结果
<think>好的,我需要回答用户关于C语言中static boolbool区别的问题,涉及作用域生命周期。首先,我需要回顾一下C语言中static关键字的作用,以及普通变量静态变量在作用域生命周期上的差异。 根据引用资料,static在C语言中可以修饰全局变量、局部变量函数。对于全局变量函数,static会限制它们的作用域仅在当前文件内,防止被其他文件访问。而对于局部变量,static会改变其生命周期,使其从自动存储期变为静态存储期,即变量在程序运行期间一直存在,而不是在函数调用结束后销毁。同时,静态局部变量的作用域仍然局限于函数内部,但生命周期延长了。 用户的问题是关于bool类型的变量,但C语言标准中并没有原生的bool类型,通常是通过<stdbool.h>头文件定义的宏来实现,使用_Bool类型。因此,这里的讨论实际上是关于static修饰的_Bool变量普通的_Bool变量的区别。 接下来,我需要对比普通bool变量static bool变量在作用域生命周期上的不同。普通局部变量(如函数内定义的bool)的作用域是块作用域,生命周期在函数执行期间存在,每次函数调用都会重新初始化。而static bool局部变量虽然作用域相同,但生命周期是整个程序运行期间,只初始化一次,保持上次调用的值。 对于全局变量,普通全局bool的作用域是整个程序(其他文件通过extern可以访问),而static全局bool的作用域仅限于当前文件,无法被其他文件访问,这增加了封装性。 另外,初始化方面,普通局部变量如果不显式初始化,其值是不确定的,而静态局部变量会被默认初始化为0(即false)。这在bool类型中尤其重要,因为未初始化的普通bool变量可能有随机值,而static bool会被初始化为false。 需要注意的是,C语言中变量的存储类别决定了生命周期作用域。普通局部变量是自动存储期,static局部变量是静态存储期。全局变量默认是静态存储期,但作用域不同。 最后,总结两者的区别时,需要分局部全局两种情况讨论,并强调static如何影响作用域生命周期,同时提及初始化的差异。确保回答结构清晰,结合引用中的知识点,如引用[3]提到static在全局变量中缩小作用域,在局部变量中延长生命周期,引用[4]提到静态局部变量的初始化时机存储期。</think>### C语言中`static bool`与`bool`的区别 在C语言中,`static`关键字对变量的作用域生命周期有显著影响。`static bool`与普通`bool`变量的区别主要体现在以下方面: --- #### 1. **作用域** - **普通`bool`变量**: - 若在**函数内定义**(局部变量):作用域仅限于该函数内部,其他函数或文件无法访问。 - 若在**全局定义**(无`static`修饰):作用域为整个程序,其他文件可通过`extern`关键字访问[^3][^4]。 - **`static bool`变量**: - 若在**函数内定义**(静态局部变量):作用域仍限于该函数内部,但生命周期延长(见下文)[^3][^4]。 - 若在**全局定义**(静态全局变量):作用域仅限于当前文件,其他文件无法访问,增强了封装性[^3][^4]。 --- #### 2. **生命周期** - **普通`bool`变量**: - **局部变量**:生命周期为函数执行期间,函数调用时创建,函数返回时销毁。每次调用函数时变量会被重新初始化。 - **全局变量**:生命周期为整个程序运行期间,从程序启动到结束一直存在[^1][^3]。 - **`static bool`变量**: - **静态局部变量**:生命周期为整个程序运行期间,仅在首次调用函数时初始化一次,后续调用保留上次的值[^3][^4]。 - **静态全局变量**:生命周期同样为整个程序运行期间,但作用域被限制在当前文件内[^4]。 --- #### 3. **初始化特性** - **普通局部`bool`变量**: - 若未显式初始化,其值为随机值(取决于内存状态)。 - **静态局部`static bool`变量**: - 若未显式初始化,默认初始化为`false`(即`0`)[^4]。 --- #### 4. **示例对比 ```c #include <stdbool.h> // 普通全局变量:作用域为整个程序 bool global_bool; // 静态全局变量:作用域仅限当前文件 static bool static_global_bool; void func() { // 普通局部变量:每次调用时初始化 bool local_bool = true; // 静态局部变量:仅首次初始化,保留上次值 static bool static_local_bool; } ``` --- #### 总结 | 特性 | 普通`bool`(局部) | `static bool`(局部) | 普通`bool`(全局) | `static bool`(全局) | |-----------------|-------------------|----------------------|-------------------|----------------------| | **作用域** | 函数内 | 函数内 | 整个程序 | 当前文件 | | **生命周期** | 函数执行期间 | 程序运行期间 | 程序运行期间 | 程序运行期间 | | **跨文件访问** | 不适用 | 不适用 | 允许(通过`extern`) | 禁止 | | **默认初始化值** | 随机值 | `false` | `false` | `false` | --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值