2010-04-05 10 views
5

Actualmente estoy desarrollando una aplicación multiplataforma C. ¿Hay alguna macro del compilador que se define solo durante la compilación en Windows, entonces puedo #ifdef algunos #includes específicos de Windows?Determinar si se está compilando en Windows u otro sistema

Un ejemplo típico es la selección entre WinSock y conectores de Berkeley encabezados:

#ifdef _WINDOWS 
    #include <winsock.h>  
#else 
    #include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <sys/un.h> 
    #include <arpa/inet.h> 
    #include <netdb.h> 
#endif 

Así que lo que estoy buscando es algo así _WINDOWS macro.

Respuesta

10

Su mejor opción es utilizar

_WIN32 

Es guaranteed to be defined cuando se compila para una plataforma Windows de 32 bits o de 64 bits utilizando el compilador Visual C++. Esperaría que otros compiladores para Windows también lo definan (el compilador Intel C++ lo define, al igual que MinGW gcc).

+0

Y lo que en caso de Windows de 64 bits? Supongo que _WIN32 está definido solo en sistemas de 32 bits, ¿verdad? – NumberFour

+2

El 32 está realmente allí para separarlo de versiones antiguas de Windows de 16 bits. Eliminar esa definición en Win64 habría roto demasiadas cosas, así que era menos complicado dejarlo. –

Cuestiones relacionadas