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

不可将对象的值赋给具有部分重叠区域的另一个对象

10.4.1 ID_overlappingAssignment
目录 › next › previous

如果两个对象的存储区域有部分重叠,将其中一个对象的值赋给另一个对象会导致标准未定义的行为。

示例:

union U {
    int16_t x;
    int16_t y;
    int64_t z;
} u;

u.x = u.y;   // Compliant
u.z = u.x;   // Non-compliant, undefined behavior

例中 x 和 y 的存储区域完全重叠且类型相同,可以相互赋值;x 和 z 有部分重叠,不可相互赋值。

依据

ISO/IEC 9899:1999 6.5.16.1(3)-undefined ISO/IEC 9899:2011 6.5.16.1(3)-undefined ISO/IEC 14882:2003 5.17(8)-undefined ISO/IEC 14882:2011 5.17(8)-undefined

参考

MISRA C 2012 19.1 MISRA C++ 2008 0-2-1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.