Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 注961:违反MISRA 2004咨询规则12.6,运算符“!”需要布尔表达式_C++ - Fatal编程技术网

C++ 注961:违反MISRA 2004咨询规则12.6,运算符“!”需要布尔表达式

C++ 注961:违反MISRA 2004咨询规则12.6,运算符“!”需要布尔表达式,c++,C++,这是我代码的一部分,我收到了标题中提到的警告 代码是 #define OMAP3_MCSPI_SYSSTATUS_RESETDONE (1U) uint32_t tmp =6 ; while (!(tmp & OMAP3_MCSPI_SYSSTATUS_RESETDONE)) 警告是 Note 961: Violates MISRA 2004 Advisory Rule 12.6, boolean expression required for operator: '!

这是我代码的一部分,我收到了标题中提到的警告

代码是

#define OMAP3_MCSPI_SYSSTATUS_RESETDONE     (1U)    
uint32_t tmp =6 ;
while (!(tmp & OMAP3_MCSPI_SYSSTATUS_RESETDONE))
警告是

Note 961: Violates MISRA 2004 Advisory Rule 12.6, boolean expression required for operator: '!'
为什么我会收到这个警告

while (!(tmp & OMAP3_MCSPI_SYSSTATUS_RESETDONE != 0))

如果您想避免警告,MISRA规则引用的是a,因为版权原因,a必须修改规则

12.6 adv:逻辑运算符&、|和的操作数!应该是有效的布尔值。有效布尔表达式不应用作除&、| |和!之外的运算符的操作数

这意味着您需要将表达式tmp&OMAP3\u MCSPI\u SYSSTATUS\u RESETDONE替换为布尔值。在这种情况下,正确的方法是将其与0进行比较

e、 g


“tmp”是一个32位无符号整数uint32\u t。”OMAP3_MCSPI_SYSSTATUS_RESETDONE'是一个无符号整数。使用“&”运算符是“and”,将这些位相加,得到另一个无符号整数。MISRA规则希望您使用布尔表达式而不是无符号整数表达式作为“!”的参数接线员

要解决此问题,您可以使用

while ( !((tmp & OMAP3_MCSPI_SYSSTATUS_RESETDONE) != 0))


问题是什么?@juanchopanza为什么我会收到这个警告?因为MISRA规则说在这种情况下你应该得到警告。我认为你可能需要注意操作符的优先级。据我记忆所及,!=具有比&更高的优先级,因此您将以!tmp&OMAP3\u MCSPI\u系统状态\u重置完成!=0Hi Wojtek,我得到的警告与其他代码行相同,即如果strstrstrflash->name,M25P=NULL..但仍然得到与警告613相同的警告:可能在运算符'->'的左参数中使用NULL指针'flash',我尝试使用NULL检查条件,但得到的警告相同warning@Aswin-这是另一个问题-我们需要查看所有使用和设置flash的代码。
while ( !((tmp & OMAP3_MCSPI_SYSSTATUS_RESETDONE) != 0))
while ( (tmp & OMAP3_MCSPI_SYSSTATUS_RESETDONE) != OMAP3_MCSPI_SYSSTATUS_RESETDONE)