MISRA C:2012 Rule 8.11

Когда массив с внешним рычажным устройством объявляется, его размер должен быть явным образом задан

Описание

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

Когда массив с внешним рычажным устройством объявляется, его размер должен быть явным образом задан.

Объяснение

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

Реализация Polyspace

Средство проверки правила отмечает массивы, объявленные с помощью extern спецификатор, если объявление явным образом не задает размер массивов.

Дополнительное сообщение в отчете

Размер массива array_name должен быть явным образом утвержден. Когда массив с внешним рычажным устройством объявляется, его размер должен быть явным образом задан.

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

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

Примеры

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

#include <stdint.h>

extern int32_t array1[10];    /*  Compliant  */
extern int32_t array2[];      /*  Non-compliant  */

В этом примере два массива объявляются array1 и array2. array1 имеет внешнее рычажное устройство (extern ключевое слово) и размер 10. array2 также имеет внешнее рычажное устройство, но никакой заданный размер. array2 несовместимо, потому что для массивов с внешним рычажным устройством, необходимо явным образом задать размер.

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

Группа: объявления и определения
Категория: консультация
Категория AGC: консультация
Введенный в R2014b