Правило 17.5 MISRA C:2012

Аргумент функции, соответствующий параметру, который, как объявляют, имел тип массива, должен иметь соответствующее число элементов

Описание

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

Аргумент функции, соответствующий параметру, который, как объявляют, имел тип массива, должен иметь соответствующее число элементов.

Объяснение

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

Однако законно в C задать размер массивов, но передать массив меньшего размера. Это правило препятствует тому, чтобы вы передали массив размера, меньшего, чем размер, который вы объявили.

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

Аргумент функции, соответствующий параметру, который, как объявляют, имел тип массива, должен иметь соответствующее число элементов.

Тип аргумента имеет элементы actual_size, тогда как тип параметра ожидает элементы expected_size.

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

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

Примеры

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

void func(int arr[4]);

int main() {
    int arrSmall[3] = {1,2,3};
    int arr[4] = {1,2,3,4};
    int arrLarge[5] ={1,2,3,4,5};
    
    func(arrSmall);      /* Non-compliant */
    func(arr);           /* Compliant */
    func(arrLarge);      /* Compliant */
    
    return 0;
}

В этом примере нарушено правило, когда arrSmall, который имеет размер 3, передается func, который ожидает по крайней мере 4 элемента.

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

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

Введенный в R2015b