Документация по платформо-зависимым макросам в Linux / POSIX - PullRequest
4 голосов
/ 01 января 2011

При компиляции программы на C / C ++ под Windows с использованием Visual Studio (или компилятора, который пытается быть совместимым) существует предопределенный макрос _WIN32 (Источник: http://msdn.microsoft.com/en-us/library/b0084kay.aspx), который можно использовать для конкретной платформы #ifdef-s.

Мне нужен аналог под Linux: макрос, который сообщает мне, что я компилирую для Linux / ОС, которая претендует на (более или менее) POSIX-совместимость.

Поэтому я посмотрел документацию по gcc и обнаружил следующее: http://gcc.gnu.org/onlinedocs/cpp/System_002dspecific-Predefined-Macros.html

Применительно к моей программе следующие макросы (gcc 4.4.5 - Ubuntu 10.10) выглядели многообещающе (надеюсь, что я не уронилважный макрос):

#define __USE_BSD 1
#define __unix__ 1
#define __linux 1
#define __unix 1
#define __linux__ 1
#define _POSIX_SOURCE 1
#define __STDC_HOSTED__ 1
#define __STDC_IEC_559__ 1
#define __gnu_linux__ 1
#define __USE_SVID 1
#define __USE_XOPEN2K 1
#define __USE_POSIX199506 1
#define _G_USING_THUNKS 1
#define __USE_XOPEN2K8 1
#define _BSD_SOURCE 1
#define unix 1
#define linux 1
#define __USE_POSIX 1
#define __USE_POSIX199309 1
#define __SSP__ 1
#define _SVID_SOURCE 1
#define _G_HAVE_SYS_CDEFS 1
#define __USE_POSIX_IMPLICITLY 1

Где я могу найти подробную документацию по ним - относительно упомянутых выше специфичных для Windows макросов?

Кроме того, меня интересуют макросы, которые обычно определяютсядля других POSIX-совместимых операционных систем, таких как * BSD и т. д.

Ответы [ 3 ]

7 голосов
/ 01 января 2011

В руководстве glibc перечислены некоторые из этих макросов, включая _POSIX_SOURCE.Однако они работают не так, как вы могли бы ожидать: программист определяет эти макросы (возможно, в сценарии сборки), а заголовки библиотеки C проверяют его, чтобы включить или отключить определенные функции.

4 голосов
/ 01 января 2011

Однажды я собрал идентифицирующие макросы для использования кроссплатформенной системой пакетов pkgsrc: http://www.netbsd.org/docs/pkgsrc/fixes.html#fixes.build.cpp

Тогда я не нашел никакого авторитетного источника.

3 голосов
/ 01 января 2011

В настоящее время в городе есть две игры: Windows и POSIX. Поэтому вы, вероятно, сможете получить то, что вы хотите, с #ifndef _WIN32. Различия между сохранившимися вариантами Unix лучше всего проводить с помощью тестов функций в стиле autoconf, например #ifdef HAVE_SYS_WHATEVER_H; но не связывайтесь ни с одним из них, пока не узнаете, что он вам нужен. Многие из стандартных тестов в руководстве autoconf в настоящее время не нужны.

(VMS и все, что IBM называет своей мэйнфреймовой ОС, отличной от Unixy, в наши дни может по-прежнему считается большим количеством игр в городе, но я бы не стал пытаться переносить их на другие, пока кто-нибудь не спросит за это.)

...