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

初始化列表中不应存在重复的指派符

6.6.3 ID_repeatedDesignator
目录 › next › previous

在 C 语言的初始化列表中,可以通过指派符(designator)对指定的结构体成员或数组元素进行初始化,应注意重复的指派符会使其指定的对象被重复初始化,往往意味着笔误或复制粘贴错误。

示例:

struct T { int x, y; };
struct T obj = { .x = 0, .x = 1 };            // Non-compliant
int arr[3] = { [0] = 0, [1] = 1, [1] = 2 };   // Non-compliant

例中重复的指派符 .x 和 [1] 是没有意义的。

C++20 对类对象的初始化也引入了指派符,但要求更为严格,重复的或颠倒次序的指派符无法通过编译,如:

struct T { int x, y; };
T a { .y = 0, .x = 1 };   // Compile error in C++20
T b { .x = 0, .x = 1 };   // Compile error in C++20
T c { .x = 0, .y = 1 };   // OK

依据

ISO/IEC 9899:1999 6.7.8(6 7) ISO/IEC 9899:2011 6.7.9(6 7)

参考

MISRA C 2012 9.4
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.