MISRA C:2012 Rule 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 */

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

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

Группа: указатели и массивы
Категория: Консультационные
Категория AGC: Читаемость