exponenta event banner

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

Указатель должен указывать на согласованный тип, когда это возможно

Описание

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

Указатель должен по возможности указывать на согласованный тип.

Объяснение

Это правило позволяет избежать непреднамеренного использования указателей для изменения объектов.

Внедрение Polyspace

Средство проверки правил помечает указатель на не-const параметр функции, если указатель не изменяет адресуемый объект. Предполагается, что указатель не предназначен для изменения объекта и поэтому должен указывать на const-квалифицированный тип.

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

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

Примеры

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

#include <string.h>

typedef unsigned short uint16_t;

uint16_t ptr_ex(uint16_t *p) {      /* Non-compliant */
    return *p;
}

char last_char(char * const s){     /* Non-compliant */
    return s[strlen(s) - 1u];
}

uint16_t first(uint16_t a[5]){      /* Non-compliant */
    return a[0];
}

В этом примере показаны три различных параметра указателя, не соответствующих требованиям.

  • В ptr_ex функция, p не изменяет объект. Однако тип, к которому p точки не const-квалифицирован, поэтому он не соответствует требованиям.

  • В last_char, указатель s является const-qualified, но тип, на который он указывает, - not. Этот параметр несовместим, поскольку s не изменяет объект.

  • Функция first не изменяет элементы массива a. Однако тип элемента не является const-квалифицировано, поэтому a также является несоответствующим.

Коррекция - использование const Ключевые слова

Одной из возможных корректировок является добавление const квалификаторы к определениям.

#include <string.h>

typedef unsigned short uint16_t;

uint16_t ptr_ex(const uint16_t *p){     /* Compliant */
    return *p;
}

char last_char(const char * const s){   /* Compliant */
    return s[strlen( s ) - 1u];
}

uint16_t first(const uint16_t a[5]) {   /* Compliant */
    return a[0];
}

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

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