MISRA C:2012 Rule 9.5

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

Описание

Примечание

Используйте Bug Finder вместо Code Prover для проверки правил кодирования. Поддержка кодирования правил, регистрируясь в Code Prover будет удалена в будущем релизе. См. Вопросы совместимости.

Управляйте определением

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

Объяснение

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

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

Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.

Примеры

развернуть все

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: удобочитаемость

Вопросы совместимости

развернуть все

Не рекомендуемый запуск в R2021b

Введенный в R2014b