VS2019 16.10.3按位操作触发Intellisense/编译器警告的解决建议咨询
VS2019 按位非
~警告消除方案 你遇到的是VS静态分析规则抛出的C26827号警告,目的是识别开发者可能混淆按位非~和逻辑非!的编码错误,你可以通过以下3种方案按需解决:
方案1:局部抑制警告(最推荐)
仅关闭当前确认无误的代码行的警告,不会影响其他代码的正常报错提示,在对应代码行前添加#pragma warning(suppress: 26827)即可,修改后的代码示例:unsigned __int8 miniMask = ads & 0xFF; // Lower 8 DUT MASK unsigned __int8 miniMask2 = (ads & 0xFF00) >> 8; // Upper 8 Dut Mask unsigned __int8 set = miniMask; // Tester Channel connection #pragma warning(suppress: 26827) unsigned __int8 cleared = ~set; // HV connection unsigned __int8 set1 = miniMask2; #pragma warning(suppress: 26827) unsigned __int8 cleared1 = ~set1;如果需要抑制多段代码的该警告,也可以用push/pop配对使用:
#pragma warning(push) #pragma warning(disable: 26827) // 中间所有使用按位非的代码都不会触发该警告 unsigned __int8 cleared = ~set; unsigned __int8 cleared1 = ~set1; #pragma warning(pop)方案2:显式类型转换(无编译指令侵入)
该警告触发的核心原因是~运算符会默认将unsigned __int8类型的操作数提升为int类型后运算,显式转回目标类型即可让编译器识别到你是有意做位操作,无需修改警告配置:unsigned __int8 cleared = (unsigned __int8)~set; unsigned __int8 cleared1 = (unsigned __int8)~set1;方案3:项目全局关闭该警告(不推荐)
如果你确认整个项目不会出现~和!混淆的错误,可以全局关闭该规则:- 打开项目属性页(右键项目 -> 属性)
- 依次选择「配置属性 -> C/C++ -> 高级」
- 在「禁用特定警告」项中添加
26827,保存配置即可
内容的提问来源于stack exchange,提问作者Ross Youngblood
相关产品推荐
相关产品推荐

