Связь между типом и классом памяти
Ниже перечислены типы, допустимые для каждого класса памяти.
Класс памяти | d-поля | Базовый тип | ||
Функция? | Массив? | Указатель? | ||
C_AUTO | нет | да | да | Любой, кроме T_MOE |
C_EXT | да | да | да | Любой, кроме T_MOE |
C_STAT | да | да | да | Любой, кроме T_MOE |
C_REG | нет | нет | да | Любой, кроме T_MOE |
C_LABEL | нет | нет | нет | T_NULL |
C_MOS | нет | да | да | Любой, кроме T_MOE |
C_ARG | да | нет | да | Любой, кроме T_MOE |
C_STRTAG | нет | нет | нет | T_STRUCT |
C_MOU | нет | да | да | Любой, кроме T_MOE |
C_UNTAG | нет | нет | нет | T_UNION |
C_TPDEF | нет | да | да | Любой, кроме T_MOE |
C_ENTAG | нет | нет | нет | T_ENUM |
C_MOE | нет | нет | нет | T_MOE |
C_REGPARM | нет | нет | да | Любой, кроме T_MOE |
C_FIELD | нет | нет | нет | T_ENUM, T_UCHAR, T_USHORT, T_UINT, T_ULONG |
C_BLOCK | нет | нет | нет | T_NULL |
C_FCN | нет | нет | нет | T_NULL |
C_EOS | нет | нет | нет | T_NULL |
C_FILE | нет | нет | нет | T_NULL |
C_ALIAS | нет | нет | нет | T_STRUCT, T_UNION, T_ENUM |
Условия относительно d-полей касаются всех полей d1..d6 с тем исключением, что не может быть двух последовательных производных типов функция.
Хотя аргументы функции и могут быть объявлены как массивы, они все равно трактуются как указатели. Поэтому аргумент функции не может иметь массив в качестве своего первого производного типа.