exponenta event banner

MISRA C:2012 Правило 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 инициализируется дважды с использованием назначенного инициализатора.

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

Группа: Инициализация
Категория: Обязательно
Категория СМЖЛ: требуется
Представлен в R2014b