8.3.1 Кодирование типов устаревшего формата
К сожалению, в истории GCC было несколько ошибок в коде кодирования. Выполнение NeXT ожидает от GCC выдачи кодирования типов в этом историческом формате (совместимом с GCC-3.3), поэтому при использовании выполнения NeXT GCC преднамеренно введёт ряд неправильных кодировок:
- квалификатор read-only указанного типа выводится перед символом ’^’. Квалификатор read-only самого указателя игнорируется, если это не 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-6.5.0/gcc/Legacy-type-encoding.html