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

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

Описание

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

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

Объяснение

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

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

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

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

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

Примеры

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

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

/* Non-compliant: static keyword used in array declarator */
unsigned int total (unsigned int n, unsigned int arr[static 20]) {
    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);  /* Non-compliant - behavior not defined */
    res2 = total (20U, arr2); /* Non-compliant, even if behavior is defined */
}

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

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

Группа: Функция
Категория: обязательный
Категория AGC: обязательный
Язык: C99

Введенный в R2014b