MISRA C:2012 Rule 9.3

Массивы не должны быть частично инициализированы

Описание

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

Массивы не должны быть частично инициализированы.

Объяснение

Обеспечение явной инициализации для каждого элемента массива проясняет, что каждый элемент был рассмотрен.

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

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

void func(void) {
    int x[3] = {0,1,2};               /* Compliant */
    int y[3] = {0,1};                 /* Non-compliant */
    int z[3] = {0};                   /* Compliant - exception */
    int a[30] = {[1] = 1,[15]=1};     /* Compliant - exception */
    int b[30] = {[1] = 1, 1};         /* Non-compliant */
    char c[20] = "Hello World";       /* Compliant - exception */
}

В этом примере не нарушено правило, когда каждый элемент массива явным образом инициализируется.

Правило нарушено, когда некоторые элементы массива неявно инициализируются. Исключения включают следующее:

  • Инициализатор имеет форму {0}, который инициализирует все элементы, чтобы обнулить.

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

  • Массив инициализируется с помощью строкового литерала.

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

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