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中的相同代码编译时出现以下警告:
但仅适用于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"); } 输出:
请注意,无论TRUE / FALSE是整数还是bool,这都是一个问题,只是当TRUE是整数时,编译器无法正确检测到它. 存在该问题是因为有几个整数值被认为是真的.只有一个值被认为是假,所以那里没有混淆. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |