3.7.3 Системно-специфические предопределённые макросы
Препроцессор C обычно предопределяет несколько макросов, указывающих тип используемой системы и машины. Они, очевидно, отличаются на каждом целевом устройстве, поддерживаемом GCC. Данный справочник, предназначенный для всех систем и машин, не может указать их названия, но вы можете использовать cpp -dM для просмотра всех из них. См. Вызов.
Все системно-специфические предопределённые макросы расширяются до константного значения, поэтому вы можете проверить их с помощью ‘#ifdef’ или ‘#if’.
Стандарт C требует, чтобы все системно-специфические макросы были частью *зарезервированного пространства имён*. Все имена, начинающиеся с двух нижних подчёркиваний или с подчёркивания и заглавной буквы, зарезервированы для использования компилятором и библиотекой по своему усмотрению. Однако исторически системно-специфические макросы имели имена без специального префикса; например, на системах Unix часто встречается unix . Для всех таких макросов GCC предоставляет аналогичный макрос с добавлением двух нижних подчёркиваний в начале и конце. Если unix определено, то __unix__ также будет определено. Никогда не будет более двух нижних подчёркиваний; аналог _mips — __mips__.
Когда компилятору задаётся опция -ansi или любая опция -std, запрашивающая строгое соответствие стандарту, все системно-специфические предопределённые макросы вне зарезервированного пространства имён подавляются. Параллельные макросы внутри зарезервированного пространства имён остаются определёнными.
Мы постепенно исключаем все предопределённые макросы, находящиеся вне зарезервированного пространства имён. Вы не должны использовать их в новых программах, и мы рекомендуем исправить более старые коды, чтобы использовать аналогичные макросы, когда вы их обнаружите. Мы также не рекомендуем использовать системно-специфические макросы, находящиеся в зарезервированном пространстве имён. В долгосрочной перспективе лучше проверять конкретные необходимые функции, используя инструмент, такой как autoconf.
Далее: C++ Имена операторов, Предыдущее: Общие предопределённые макросы, Вверх: Предопределённые макросы [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/cpp/System-specific-Predefined-Macros.html