Necesito mi código para hacer cosas diferentes 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? ¿Hay una mejor manera de hacer lo mismo?
c
operating-system
c-preprocessor
conditional-compilation
perimosocordiae
fuente
fuente
C
noC++
Respuestas:
El sitio Predefined Macros for OS tiene una lista muy completa de comprobaciones. Aquí hay algunos de ellos, con enlaces a donde se encuentran:
Ventanas
_WIN32
Tanto de 32 bits como de 64 bits_WIN64
64 bits solamenteUnix (Linux, * BSD, Mac OS X)
Vea esta pregunta relacionada sobre algunas de las trampas del uso de esta verificación.
unix
__unix
__unix__
Mac OS X
__APPLE__
__MACH__
Ambos están definidos; la comprobación de 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__
fuente
__unix__
. ¿Por qué lo incluirías en la lista?unix
símbolos y no los definewin32
, así que tenga cuidado. OTOH lo define__CYGWIN__
.__linux__
igual que__ANDROID__
??show GCC define en Windows:
en Linux:
Macros predefinidas en MinGW:
en UNIX:
fuente
Basado en nadeausoftware y la respuesta de Lambda Fairy .
Probado con GCC y clang en:
fuente
En la mayoría de los casos, es mejor verificar si una funcionalidad dada está presente o no. Por ejemplo: si la función
pipe()
existe o no.fuente
fuente
Las macros predefinidas del compilador de Microsoft C / C ++ (MSVC) se pueden encontrar aquí
Creo que estás buscando:
compilador gcc Predefined MAcros se puede encontrar aquí
Creo que estás buscando:
Haga un google para sus compiladores apropiados predefinidos.
fuente
No hay una macro estándar establecida de acuerdo con el estándar C. Algunos compiladores de C establecerán uno en algunas plataformas (por ejemplo, el GCC parcheado de Apple establece una macro para indicar que se está compilando en un sistema Apple y para la plataforma Darwin). Su plataforma y / o su compilador de C también pueden establecer algo, pero no hay una forma general.
Como dijo hayalci, es mejor tener estas macros configuradas de alguna manera en su proceso de construcción. Es fácil definir una macro con la mayoría de los compiladores sin modificar el código. Simplemente puede pasar
-D MACRO
a GCC, es decirY en tu código:
fuente
En MinGW, la
_WIN32
verificación de definición no funciona. Aquí hay una solución:Para obtener más información, consulte: https://sourceforge.net/p/predef/wiki/OperatingSystems/
fuente
Use
#define OSsymbol
y#ifdef OSsymbol
donde OSsymbol es un#define
símbolo capaz de identificar su sistema operativo objetivo.Por lo general, incluiría un archivo de encabezado central que define el símbolo del sistema operativo seleccionado y usaría directorios de biblioteca y de inclusión específicos del sistema operativo para compilar y construir.
No especificó su entorno de desarrollo, pero estoy bastante seguro de que su compilador proporciona definiciones globales para plataformas y sistemas operativos comunes.
Ver también http://en.wikibooks.org/wiki/C_Programming/Preprocessor
fuente
Para resumirlo todo, aquí hay un montón de enlaces útiles.
libportable
fuente
Disculpe la referencia externa, pero creo que es adecuada para su pregunta:
Consejo de C / C ++: Cómo detectar el tipo de sistema operativo usando macros predefinidas del compilador
fuente
Puede usar el
Boost.Predef
que contiene varias macros predefinidas para la plataforma de destino, incluido el sistema operativo (BOOST_OS_*
). Sí, a menudo se considera que boost es una biblioteca de C ++, pero este es un encabezado de preprocesador que también funciona con C.Por ejemplo
La lista completa se puede encontrar en
BOOST_OS
las macros del sistema operativofuente
No encontré la definición de Haiku aquí. Para completar, la definición de Haiku-os es simple
__HAIKU__
fuente
Algunos compiladores generarán #defines que pueden ayudarte con esto. Lea la documentación del compilador para determinar cuáles son. MSVC define uno que es
__WIN32__
, GCC tiene algunos que puedes ver contouch foo.h; gcc -dM foo.h
fuente
Puede usar directivas de preprocesador como advertencia o error para verificar en el momento de la compilación que no necesita ejecutar este programa, simplemente compílelo .
fuente
Escribí una pequeña biblioteca para obtener el sistema operativo en el que se encuentra, se puede instalar usando clib (El administrador de paquetes C), por lo que es realmente simple usarlo como una dependencia para sus proyectos.
Instalar en pc
Uso
Devuelve una cadena (
char*
) con el nombre del sistema operativo que está utilizando, para obtener más información sobre este proyecto, consulte la documentación en Github .fuente