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: удобочитаемость
Язык: C90, C99