复合表达式值分配给更宽的类型

时间:2013-10-22 09:45:19

标签: c

以下摘自MISRA C:2012,我无法理解

复合表达式的值(+, - ,*,/,&,|,^,<<,>>,?:)不得分配给类型较宽的对象。

示例:

u32a = u16a + u16b;     //non - compliant to MISRA C guidelines

其中u16是uint16_t而u32是uint32_t。

这会在程序运行期间导致任何问题吗?我们可能需要使用u32a,因为在这种情况下u16a可能会导致整数溢出?

1 个答案:

答案 0 :(得分:3)

这是因为您永远不知道编译器将如何处理(u16a + u16b)表达式,因为它可能会考虑将结果存储为16位,然后再将其分配给目标变量(考虑8位和16位目标)用于嵌入式系统。)

你希望(错误的)不存在溢出,而绝对可能。按照MISRA的建议编写作业只会让你清楚地看到这个溢出问题。