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