MISRA C:2012 Rule 9.2

Инициализатор для агрегата или объединения должен быть заключен в фигурные скобки

Описание

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

Инициализатор для агрегата или объединения должен быть заключен в фигурные скобки.

Объяснение

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

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

Совет

Чтобы избежать вложенных фигурных скобок для подобъектов, используйте синтаксис {0}, который обнуляет все значения.

Обменивайтесь сообщениями в отчете

Инициализатор для агрегата или объединения должен быть заключен в фигурные скобки.

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

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

Примеры

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

void initialize(void) {
    int x[4][2] = {{0,0},{1,0},{0,1},{1,1}}; /* Compliant */
    int y[4][2] = {{0},{1,0},{0,1},{1,1}};   /* Compliant */
    int z[4][2] = {0};                       /* Compliant */
    int w[4][2] = {0,0,1,0,0,1,1,1};         /* Non-compliant */
}

В этом примере правило не нарушено когда:

  • Инициализаторы для каждой строки массива заключены в фигурные скобки.

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

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

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

Группа: инициализация
Категория: необходимый
Категория AGC: удобочитаемость
Язык: C90, C99

Введенный в R2014b