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