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