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