MISRA C:2012 Rule 10.1
R2026bOperands shall not be of an inappropriate essential type
描述
Operands shall not be of an inappropriate essential type 1 .
理由
本质类型分类定义了对象或表达式的本质类型。
| 本质类型分类 | 标准类型 |
|---|---|
本质布尔类型 |
您还可以使用 |
本质字符类型 | char |
本质枚举类型 | named enum |
本质有符号类型 | signed char, signed short, signed int, signed long, signed long long |
本质无符号类型 | unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long |
本质浮点类型 | 实数浮点: 复数浮点: |
对于某些运算符的操作数,您无法使用特定的本质类型。在下表中,每一行代表一个运算符/操作数的组合。如果该行中的“本质类型”列不为空,则表示在将该类型用作操作数时将受 MISRA 规则的限制。表中的数字对应表后面的理由列表。
| 运算 | 算术操作数的本质类型分类 | |||||||
|---|---|---|---|---|---|---|---|---|
| 运算符 | 操作数 | 布尔 | 字符 | 枚举 | 有符号 | 无符号 | 浮点 | |
| 实数 | 复数 | |||||||
[ ] | 整数 | 3 | 4 | 1 | 9 | |||
+(一元) | 3 | 4 | 5 | |||||
-(一元) | 3 | 4 | 5 | 8 | ||||
+ - | 任一 | 3 | 5 | |||||
++ -- | 3 | 5 | 9 | |||||
* / | 任一 | 3 | 4 | 5 | ||||
% | 任一 | 3 | 4 | 5 | 1 | 9 | ||
< > <= >= | 任一 | 3 | 9 | |||||
== != | 任一 | 10 | 10 | |||||
! && || | 任意 | 2 | 2 | 2 | 2 | 2 | 2 | |
<< >> | 左 | 3 | 4 | 5,6 | 6 | 1 | 9 | |
<< >> | 右 | 3 | 4 | 7 | 7 | 1 | 9 | |
~ & | ^ | 任意 | 3 | 4 | 5,6 | 6 | 1 | 9 | |
?: | 第一个 | 2 | 2 | 2 | 2 | 2 | 2 | |
?: | 第二个和第三个 | |||||||
对于这些操作数,本质浮点类型的表达式属于约束违反值。
当操作数被解释为布尔值时,应使用本质布尔类型的表达式。
当操作数被解释为数值时,不得使用本质布尔类型的操作数。
当操作数被解释为数值时,不得使用本质字符类型的操作数。字符数据的数值是实现定义的。
在算术运算中,不得使用本质枚举类型的操作数。枚举对象使用实现定义的整数类型。因此,涉及枚举对象的运算可能产生类型不符合预期的结果。
仅对本质无符号类型的操作数执行移位运算和按位运算。当对本质有符号类型操作数执行移位运算和按位运算时,结果数值是未定义的或由实现定义的。
为避免负数移位导致未定义行为,右侧操作数应使用本质无符号类型。
对于一元负号运算符,不得使用本质无符号类型的操作数。结果的符号性取决于 int 的实现大小。
对于这些操作数,本质复数浮点类型的表达式属于约束违规。
比较浮点类型可能会导致取决于具体实现的意外结果。比较浮点类型时,应考虑浮点粒度 (
FLT_EPSILON) 及数值的大小。
请注意,对于位字段类型:
如果位字段实现为布尔值,则该位字段为本质布尔类型。
如果位字段实现为有符号或无符号类型,则该位字段分别为本质有符号类型或本质无符号类型。
位字段的类型是指能够表示该位字段的最小类型。例如,此处的
stmp类型本质上为 8 位整数:typedef signed int mybitfield; typedef struct { mybitfield f1 : 1; } stmp;
有关本质类型的详细信息,请参阅Essential Type Model Used in MISRA C Rule Checking。
Polyspace 实现
当某个运算的操作数具有不适当的本质类型时,Polyspace® 会报告违反了此规则。作为例外,Polyspace 不会对以下用例报告违规:
将本质有符号类型的非负整数常量表达式用作移位运算符的右操作数。
将本质实数浮点对象或本质复数浮点对象与常量字面值 0 或宏
INFINITY/-INFINITY进行比较。
故障排除
如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示。
示例
检查信息
| 组:基本类型模型 |
| 类别:必需 |
| AGC 类别:建议 |
PQL 名称:std.misra_c_2012.R10_1 |
版本历史记录
另请参阅
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C:2025
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.