5

Ich entwickle derzeit eine plattformübergreifende C Anwendung. Gibt es einen Compiler-Makro, der nur während der Kompilierung unter Windows definiert ist, so kann ich #ifdef einige Windows-spezifische #includes?Ermitteln, ob Kompilieren unter Windows oder einem anderen System

Typisches Beispiel ist die Auswahl zwischen WinSock und Berkeley Sockets-Header:

#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 

Also das, was ich bin auf der Suche nach so etwas wie diese ist _WINDOWS Makro.

Antwort

10

Ihre beste Wette ist

_WIN32 

Es guaranteed to be defined ist zu verwenden, wenn eine 32-Bit oder 64-Bit-Windows-Plattform mit der Visual C++ Compiler kompiliert wird. Ich würde erwarten, dass andere Compiler für Windows es ebenfalls definieren (der Intel C++ - Compiler definiert es ebenso wie das MinGW gcc).

+0

Und was bei 64-Bit-Windows? Ich nehme an, _WIN32 ist nur auf 32-Bit-Systemen definiert, oder? – NumberFour

+2

Die 32 ist wirklich da, um sie von alten 16-Bit-Versionen von Windows zu trennen. Das Entfernen dieser Definition in Win64 hätte zu viele Dinge kaputt gemacht, so dass es weniger mühsam war, sie zu verlassen. –

Verwandte Themen