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-6.5.0/cpp/System-specific-Predefined-Macros.html