¿Cómo verifico el sistema operativo con una directiva de preprocesador?

Resuelto perimosocordiae asked hace 15 años • 18 respuestas

Necesito que mi código haga diferentes cosas según el sistema operativo en el que se compila. Estoy buscando algo como esto:

#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif

¿Hay alguna forma de hacer esto? ¿Existe una mejor manera de hacer lo mismo?

perimosocordiae avatar Sep 27 '08 06:09 perimosocordiae
Aceptado

El sitio Macros predefinidas para sistema operativo tiene una lista muy completa de comprobaciones. Éstos son algunos de ellos, con enlaces a donde se encuentran:

ventanas

_WIN32   Tanto de 32 bits como de 64 bits
_WIN64   Solo 64 bits
__CYGWIN__

Unix (Linux, *BSD, pero no Mac OS X)

Consulte esta pregunta relacionada sobre algunos de los inconvenientes del uso de esta verificación.

unix
__unix
__unix__

Mac OS X

__APPLE__También se utiliza para clásico.
__MACH__

Ambos están definidos; comprobar cualquiera de los dos debería funcionar.

linux

__linux__
linux Obsoleto (no compatible con POSIX)
__linuxObsoleto (no compatible con POSIX)

FreeBSD

__FreeBSD__

Androide

__ANDROID__

Lambda Fairy avatar Nov 23 '2011 21:11 Lambda Fairy

mostrar GCC define en Windows:

gcc -dM -E - <NUL:

en Linux:

gcc -dM -E - </dev/null

Macros predefinidas en MinGW:

WIN32 _WIN32 __WIN32 __WIN32__ __MINGW32__ WINNT __WINNT __WINNT__ _X86_ i386 __i386

en UNIX:

unix __unix__ __unix
qwer avatar Mar 15 '2009 11:03 qwer

Las macros predefinidas del compilador Microsoft C/C++ (MSVC) se pueden encontrar aquí

Creo que estás buscando:

  • _WIN32- Se define como 1 cuando el destino de compilación es ARM de 32 bits, ARM de 64 bits, x86 o x64. De lo contrario, indefinido
  • _WIN64- Definido como 1 cuando el destino de compilación es ARM de 64 bits o x64. De lo contrario, indefinido.

Las macros predefinidas del compilador gcc se pueden encontrar aquí

Creo que estás buscando:

  • __GNUC__
  • __GNUC_MINOR__
  • __GNUC_PATCHLEVEL__

Haga una búsqueda en Google para encontrar los compiladores predefinidos apropiados.

Martin York avatar Sep 26 '2008 23:09 Martin York