☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

负号不应作用于无符号整数

10.3.2 ID_minusOnUnsigned
目录 › next › previous

负号作用于 unsigned int、unsigned long、unsigned long long 等无符号整型表达式的结果仍为无符号整数,易产生意料之外的错误。

当 int 类型的取值范围可以包含 unsigned char、unsigned short 等“较小”无符号整型的取值范围时,较小的无符号整型可以被提升为 int 类型,负号作用于这种类型的表达式可以得到有符号的结果,但会降低可移植性。

示例:

unsigned int x = 1;
signed long long y = -x;        // Non-compliant, ‘y’ equals UINT_MAX, not -1
unsigned long long z = -1ULL;   // Non-compliant, use ULLONG_MAX instead

例中 y 的值预期为 -1,但实际值是无符号整数的最大值;-1ULL 这种常量是令人困惑的,应使用 ULLONG_MAX 代替。

配置

allowSmallUnsignedTypes: 是否允许负号作用于 unsigned char、unsigned short 等无符号整型表达式

依据

ISO/IEC 9899:1999 6.5.3.3(3) ISO/IEC 9899:2011 6.5.3.3(3)

参考

MISRA C 2004 12.9 MISRA C 2012 10.1 MISRA C++ 2008 5-3-2
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.