exponenta event banner

MISRA C:2012 Правило 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 элементов.

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

Группа: Функции
Категория: Консультационные услуги
Категория СМЖЛ: удобочитаемость
Представлен в R2015b