9.3.1 Кодирование типов в устаревшем формате
К сожалению, исторически в коде кодирования GCC было несколько ошибок. Среда выполнения NeXT ожидает, что GCC будет выдавать кодировки типов в этом историческом формате (совместимом с GCC-3.3), поэтому при использовании среды выполнения NeXT GCC намеренно вводит несколько некорректных кодировок:
- квалификатор только для чтения объекта, на который указывает указатель, выводится перед ’^’. Квалификатор только для чтения самого указателя игнорируется, если только это не typedef. Кроме того, ’r’ выводится только для самого внешнего типа.
- 32-разрядные значения long кодируются как ’l’ или ’L’, но не всегда. Для typedef компилятор использует ’i’ или ’I’ вместо этого при кодировании поля структуры или указателя.
-
enumвсегда кодируются как ’i’ (int), даже если фактически они имеют тип unsigned или long.
Кроме того, среда выполнения NeXT использует для битовых полей другую кодировку. Она кодирует их как b с последующим размером, без смещения в битах и базового типа поля.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Legacy-type-encoding.html