MISRA C:2012 Rule 9.3

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

Описание

Примечание

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

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

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

Объяснение

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

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

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

Примеры

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

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

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

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

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

Введенный в R2014b