2010-04-05 13 views
5

Aktualnie rozwijam aplikację wieloplatformową C. Czy istnieje jakiekolwiek makro kompilatora, które jest zdefiniowane tylko podczas kompilacji w systemie Windows, więc mogę #ifdef niektóre specyficzne dla systemu Windows #include?Określanie, czy kompilowanie w systemie Windows lub innym systemie

Typowym przykładem jest wybór pomiędzy nagłówkami Winsock i gniazd Berkeley:

#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 

więc rzeczą szukam jest coś takiego _WINDOWS makro.

Odpowiedz

10

Najprościej jest użyć

_WIN32 

Jest guaranteed to be defined podczas kompilacji dla 32-bitowej lub 64-bitowej platformie Windows przy użyciu kompilatora Visual C++. Oczekuję, że inne kompilatory dla Windows również to definiują (kompilator Intel C++ to definiuje, podobnie jak MinGW gcc).

+0

a co w przypadku 64-bitowego systemu Windows? Zakładam, że _WIN32 jest zdefiniowany tylko w systemach 32-bitowych, prawda? – NumberFour

+2

32 jest naprawdę w stanie oddzielić go od starodawnych 16-bitowych wersji systemu Windows. Usunięcie tej definicji w Win64 zepsułoby zbyt wiele rzeczy, więc było mniej kłopotów z jego opuszczeniem. –

Powiązane problemy