Операционная система UNIX. Руководство программиста

       

Поле типа


Поле типа элемента таблицы имен содержит информацию о базовом и производных типах соответствующего имени. Компилятор языка C заполняет эти поля только при указании опции -g. Производных типов может быть несколько, но каждое имя имеет ровно один базовый тип. Формат 16-битного поля типа таков:

d6 d5 d4 d3 d2 d1 базовый тип

Биты с 0-го по 3-й кодируют базовый тип:



Обозначение Значение Базовый тип
T_NULL 0 Тип не назначен
T_VOID 1 Пустой тип
T_CHAR 2 Символ
T_SHORT 3 Короткое целое
T_INT 4 Целое
T_LONG 5 Длинное целое
T_FLOAT 6 Вещественное одинарной точности
T_DOUBLE 7 Вещественное двойной точности
T_STRUCT 8 Структура
T_UNION 9 Объединение
T_ENUM 10 Перечисление
T_MOE 11 Элемент перечисления
T_UCHAR 12 Символ без знака
T_USHORT 13 Короткое целое без знака
T_UINT 14 Целое без знака
T_ULONG 15 Длинное целое без знака

Биты с 4-го по 15-й разделены на шесть двухбитных полей, обозначаемых d1..d6. Эти поля представляют уровни производных типов, перечисленых ниже:

  
Обозначение Значение Производный тип
DT_NON 0 Производный тип отсутствует
DT_PTR 1 Указатель
DT_FCN 2 Функция
DT_ARY 3 Массив

В следующих примерах иллюстрируется представление типа в элементе таблицы имен.

char *func();

Здесь func есть имя функции, возвращающей указатель на символ. Базовый тип имени func есть 2 (символ), в поле d1 будет помещено число 2 (функция), а в поле d2 - 1 (указатель). Таким образом, в поле типа элемента func будет находиться шестнадцатеричное значение 0x62, которое и интерпретируется как функция, возвращающая указатель на символ.

short *tabptr [10] [25] [3];

Здесь tabptr есть трехмерный массив указателей на короткие целые. Базовый тип для tabptr есть 3 (короткое целое); в каждое из полей d1, d2, d3 будет помещено число 3 (массив), а в поле d4 - 1 (указатель). Таким образом, для трехмерного массива указателей на короткие целые в поле типа соответствующего элемента таблицы имен будет храниться шестнадцатеричное значение 0xff3.



Содержание раздела