exponenta event banner

MISRA C:2012 Правило 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}, который инициализирует все элементы до нуля.

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

  • Массив инициализируется строковым литералом.

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

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