MISRA C:2012 Rule 9.4

Элемент объекта не должен быть инициализирован более одного раза

Описание

Определение правила

Элемент объекта не должен быть инициализирован более одного раза.

Объяснение

Назначенные инициализаторы позволяют явно инициализировать элементы объектов, таких как массивы в любом порядке. Однако, используя назначенные инициализаторы, можно непреднамеренно инициализировать один и тот же элемент дважды и, следовательно, перезаписать первую инициализацию.

Поиск и устранение проблем

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

void func(void) {
    int a[5] = {-2,-1,0,1,2};               /* Compliant */
    int b[5] = {[0]=-2, [1]=-1, [2]=0, [3]=1, [4]=2}; /* Compliant */
    int c[5] = {[0]=-2, [1]=-1, [1]=0, [3]=1, [4]=2}; /* Non-compliant */

}

В этом примере правило нарушается, когда элемент массива c[1] инициализируется дважды с помощью назначенного инициализатора.

struct myStruct {
    int a;
    int b;
    int c;
    int d;
};

void func(void) {
    struct myStruct struct1 = {-4,-2,2,4}; /* Compliant */
    struct myStruct struct2 = {.a=-4, .b=-2, .c=2, .d=4}; /* Compliant */
    struct myStruct struct3 = {.a=-4, .b=-2, .b=2, .d=4}; /* Non-compliant */
}

В этом примере правило нарушается при struct3.b инициализируется дважды с помощью назначенного инициализатора.

Проверяйте информацию

Группа: Инициализация
Категория: Требуемая
Категория AGC: Требуется
Введенный в R2014b