tres tipos son preprocesamiento preprocesador los lenguaje funcion ejemplos directivas directiva datos básicos c++ macros cross-platform c-preprocessor

preprocesamiento - los tres tipos de datos básicos en lenguaje c++ son



¿Cómo identificar plataforma/compilador desde macros de preprocesador? (4)

Esto es lo que uso:

#ifdef _WIN32 // note the underscore: without it, it''s not msdn official! // Windows (x64 and x86) #elif __unix__ // all unices, not all compilers // Unix #elif __linux__ // linux #elif __APPLE__ // Mac OS, not sure if this is covered by __posix__ and/or __unix__ though... #endif

EDITAR: aunque lo anterior podría funcionar para los aspectos básicos, recuerde verificar qué macro desea verificar mirando las páginas de referencia de Boost.Predef . O simplemente usa Boost.Predef directamente.

Estoy escribiendo un código multiplataforma, que debe compilarse en Linux, Windows, Mac OS. En Windows, debo apoyar visual studio y mingw.

Hay algunos fragmentos de código específicos de la plataforma, que debo colocar en el #ifdef .. #endif . Por ejemplo, aquí puse el código específico de win32:

#ifdef WIN32 #include <windows.h> #endif

Pero, ¿cómo reconozco Linux y Mac OS? ¿Cuáles son los nombres definidos (o etc.) que debo usar?


Para Mac OS :

#ifdef __APPLE__

Para MingW en Windows:

#ifdef __MINGW32__

Para Linux :

#ifdef __linux__

Para otros compiladores de Windows, verifique este hilo y this para otros compiladores y arquitecturas.


Si está escribiendo C ++, no puedo recomendar el uso de las bibliotecas de Boost con la suficiente fuerza.

La última versión (1.55) incluye una nueva biblioteca Predef que cubre exactamente lo que está buscando , junto con docenas de otras macros de reconocimiento de plataforma y arquitectura.

#include <boost/predef.h> // ... #if BOOST_OS_WINDOWS #elif BOOST_OS_LINUX #elif BOOST_OS_MACOS #endif


Ver: http://predef.sourceforge.net/index.php

Este proyecto proporciona una lista razonablemente completa de #defines definiciones predefinidas para muchos sistemas operativos, compiladores, estándares de plataforma y lenguaje y bibliotecas estándar.