exponenta event banner

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

Объявление параметра массива не должно содержать статическое ключевое слово между []

Описание

Определение правила

Объявление параметра массива не должно содержать статическое ключевое слово между [].

Объяснение

Если вы используете static ключевое слово в пределах [] для параметра массива функции можно сообщить компилятору C99, что массив содержит минимальное количество элементов. Компилятор может использовать эту информацию для создания эффективного кода для определенных процессоров. Однако в вызове функции, если указано меньшее минимальное число, поведение не определено.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

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

extern int arr1[20];
extern int arr2[10];


unsigned int total (unsigned int n,
                    unsigned int arr[static 20]) { // Non-compliant
 
    unsigned int i;
    unsigned int sum = 0;

    for (i=0U; i < n; i++) {
        sum+= arr[i];
    }

    return sum;
}

void func (void) {
    int res, res2;
    res = total (10U, arr1); //Undefined behavior 
    res2 = total (20U, arr2); 
}

В этом примере правило нарушается, когда static ключевое слово используется в [] в параметре массива функции total. Даже если вы звоните total с аргументами массива, в которых поведение хорошо определено, происходит нарушение правила.

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

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