exponenta event banner

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

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

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