MISRA C:2012 Rule 11.7

Приведение не должно выполняться между указателем на объект и нецелочисленным арифметическим типом

Описание

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

Приведение не должно выполняться между указателем на объект и нецелочисленным арифметическим типом.

Объяснение

Это правило охватывает типы, которые по существу являются логическими, символами, перечислениями или плавающими.

  • Если в указатель приведено по существу логическое значение, символ или переменная перечисления, полученный указатель может быть неправильно выровнен. Неправильное выравнивание приводит к неопределенному поведению. Если указатель приведен к одному из этих типов, полученное значение может оказаться вне допустимой области значений для типа.

  • Приведение указателя к плавающему типу или от него приводит к неопределенному поведению.

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

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

Примеры

расширить все

int foo(void) {

    short *p;
    float  f;
    long  *l;

    f = (float)   p;              /* Non-compliant */
    p = (short *) f;              /* Non-compliant */

    l = (long *)  p;              /* Compliant */
}

В этом примере правило нарушается, когда:

  • Указатель p приведен к float.

  • A float переменная приведена к указателю на short.

Кастинг между указателем и нецелочисленной переменной может привести к отказу компиляции. Polyspace® флаги такие слепки.

Правило не нарушается, когда указатель p приведен к long*.

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

Группа: Преобразования типов указателей
Категория: Требуемая
Категория AGC: Требуется
Введенный в R2014b