加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 仅当将值与TRUE比较时,操作中的xxx和bool的不安全混合警告

发布时间:2020-12-16 09:54:50 所属栏目:百科 来源:网络整理
导读:我有一个用C(C89兼容)实现的库.它定义了bool数据类型bool32.它还定义了布尔文字TRUE和FALSE: #ifndef TRUE# define TRUE (0 == 0)#endif#ifndef FALSE# define FALSE (0 != 0)#endiftypedef uint32_t bool32; 以下C代码编译时没有警告: bool32 h = TRUE;if
我有一个用C(C89兼容)实现的库.它定义了bool数据类型bool32.它还定义了布尔文字TRUE和FALSE:

#ifndef TRUE
# define TRUE  (0 == 0)
#endif

#ifndef FALSE
# define FALSE (0 != 0)
#endif

typedef uint32_t bool32;

以下C代码编译时没有警告:

bool32 h = TRUE;
if(h==TRUE){
}
if(h==FALSE){
}

cpp中的相同代码编译时出现以下警告:

1>[filename/line): warning C4805: ‘==’ : unsafe mix of type ‘bool32’ and type ‘bool’ in operation

但仅适用于TRUE比较. FALSE比较不会产生警告.

我还检查了预处理文件,以确保使用上面的TRUE和FALSE定义,而不是另一个.这看起来还不错.

是否有人解释为什么警告仅在TRUE上发生以及如何避免此警告?另一个问题:为什么C模式下的编译器不会发出警告?

解决方法

您收到警告,因为将整数与bool进行比较很容易出错.

考虑以下:

bool32 x = 3;

if (x == FALSE) {
  printf("x is falsen");
} 
else if (x == TRUE) {
  printf("x is truen");
} 
else {
  printf("x is neither true nor false!n");
}

输出:

x is neither true nor false!

请注意,无论TRUE / FALSE是整数还是bool,这都是一个问题,只是当TRUE是整数时,编译器无法正确检测到它.

存在该问题是因为有几个整数值被认为是真的.只有一个值被认为是假,所以那里没有混淆.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读