MISRA C:2012 Rule 9.5

Когда назначенные инициализаторы используются для инициализации объекта массива, размер массива должен задаваться явным образом

Описание

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

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

Объяснение

Если размер массива не задан явным образом, это определяется самым высоким индексом инициализируемых элементов. При использовании длинных назначенных инициализаторов может быть не сразу понятно, какой элемент имеет самый высокий индекс.

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

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

Примеры

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

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

void display(int);

void main() {
    func(a,5);
    func(b,5);
    func(c,5);
}

void func(int* arr, int size) {
    for(int i=0; i<size; i++)
        display(arr[i]);
}

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

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

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