¿Cómo verifico el sistema operativo con una directiva de preprocesador?
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?
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)
__linux
Obsoleto (no compatible con POSIX)
FreeBSD
__FreeBSD__
Androide
__ANDROID__
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
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.