exponenta event banner

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

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

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

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