exponenta event banner

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

Объявления должны содержать не более двух уровней вложенности указателей

Описание

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

Объявления должны содержать не более двух уровней вложенности указателей.

Объяснение

Использование более двух уровней вложенности указателей может серьёзно ухудшить способность понимать поведение кода. Избегайте такого использования.

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

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

Примеры

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

typedef char *INTPTR;

void function(char ** arrPar[ ])    /* Non-compliant - 3 levels */
{
    char   **  obj2;            /* Compliant */
    char   *** obj3;            /* Non-compliant */
    INTPTR *   obj4;            /* Compliant */
    INTPTR * const * const obj5;    /* Non-compliant */
    char   ** arr[10];            /* Compliant */
    char   ** (*parr)[10];        /* Compliant */
    char   *  (**pparr)[10];        /* Compliant */
}

struct s{
    char *   s1;                /* Compliant */
    char **  s2;                /* Compliant */
    char *** s3;                /* Non-compliant */
};

struct s *   ps1;            /* Compliant */
struct s **  ps2;            /* Compliant */
struct s *** ps3;            /* Non-compliant */       

char **  (  *pfunc1)(void);        /* Compliant */
char **  ( **pfunc2)(void);        /* Compliant */
char **  (***pfunc3)(void);        /* Non-compliant */
char *** ( **pfunc4)(void);        /* Non-compliant */

В этом примере показаны различные объявления указателей и уровни вложенности. Любой указатель с более чем двумя уровнями вложенности считается несоответствующим.

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

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