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