将布尔值转换为字符会产生错误和代码中断

convert bool to char gives error and code break

本文关键字:错误 代码 中断 布尔值 转换 字符      更新时间:2023-10-16
如何使用

字符来获取位的状态,稍后我需要将char变量增加到1

      char CValue = 0;
CValue = (dataPresent & BINARYDATA_MASK)? 1:0;  // code breaks here bcz of conditional statment
CValue +=1;

在优化的构建中,编译器可以将其替换为

char CValue = (dataPresent & BINARYDATA_MASK)? 2: 1;

由于优化的代码中只有一行,因此在单步执行时不会看到调试器多次停止。

我不确定为什么要在char中存储布尔值,但是(假设您真的想对dataPresentBINARYDATA_MASK进行二进制 AND 操作 - 并且由于BINARYDATA_MASK是一个宏,因此它被定义为常量并且不需要参数)

char CValue = 0;
CValue = static_cast<char>((dataPresent & BINARYDATA_MASK) ? 1 : 0);
CValue +=1;

应该摆脱您看到的警告,同时保持所需的功能。

或者,由于 CValue 已设置为 0,因此您可以将代码修改为:

char CValue = 0;
if (dataPresent & BINARYDATA_MASK)
{
    CValue = 1;
}
CValue += 1;

听起来你有一个错别字,你没有在你的问题中显示。