MISRA C:2012 Rule 17.5

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

Описание

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

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

Объяснение

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

Однако законно в 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