Lihuen
RSSRSS AtomAtom

Ejemplo de compilación condicional

Este es un ejemplo de la vida real, de como se definen macros para compilación condicional, sacado de un header de wxwidgets. Se han castellanizado algunos comentarios. Tener en cuenta que este código es multi compilador y multi plataforma. Probablemente usted sólo necesite un subconjuto de este código para compilar en Linux, Windows y Sun OS, con gcc.

/*
   OS: primero de todo, testeamos por la plataforma MS-DOS. We must do this before testing
       for Unix, because DJGPP compiler defines __unix__ under MS-DOS
 */
 
#if defined(__GO32__) || defined(__DJGPP__) || defined(__DOS__)
	#ifndef __DOS__
		#define __DOS__
	#endif
 
/*
   OS: luego testeamos las definiciones genéricas de UNIX, luego los "sabores" particulares de UNIX
       y finalmente los sistemas parecidos a UNIX.
       Mac OS X matches this case (__MACH__), prior Mac OS do not.
 */
 
#elif defined(__UNIX__) || defined(__unix) || defined(__unix__) || \
      defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \
      defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \
      defined(__EMX__) || defined(__VMS) || defined(__BEOS__) || defined(__MACH__)
 
	#if defined(__sgi) || defined(__SGI__)
		/* SGI*/
	#endif
 
	/* define __HPUX__ para HP-UX debido a que la macro estándar es __hpux (solo por comodidad y claridad) */
	#if defined(__hpux) && !defined(__HPUX__)
		#define __HPUX__
	#endif /* HP-UX */
 
        /*Esta es importante para compilar en SUN*/
	#if defined (sun) || defined(__SUN__)
		/* SUN */
	#endif
 
	#if defined(__APPLE__) && defined(__MACH__)
		#ifndef __UNIX__
			#define __UNIX__
		#endif
		#ifndef __BSD__
			#define __BSD__
		#endif
		#ifndef __DARWIN__
			#define __DARWIN__
		#endif
	#endif
 
/*
   OS: Mac OS clásico
 */
 
#elif defined(applec) || \
      defined(THINK_C) || \
      (defined(__MWERKS__) && !defined(__INTEL__))
 
/*
   OS: OS/2
 */
#elif defined(__OS2__)
 
/*
   OS: Palm OS
 */
#elif defined(__PALMOS__)
 
 
/*
   OS: Otherwise it must be Windows
   OS: Si no es ninguno de los anteriores, debe ser Windows
 */
#else   /* Windows */
#    ifndef __WINDOWS__
#        define __WINDOWS__
#    endif  /* Windows */
 
    /* Esto debe ser cambiado para  Win64! */
#    ifndef __WIN32__
#        error "__WIN32__ should be defined for Win32 and Win64, Win16 is not supported"
#    endif
#endif