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: Читаемость
Введенный в R2014b