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