Search code examples
cincludecross-platformc-preprocessorplatform-specific

Determining whether compiling on Windows or other system


I'm currently developing a cross-platform C application. Is there any compiler macro which is defined only during compilation on Windows, so I can #ifdef some Windows specific #includes?

Typical example is selecting between WinSock and Berkeley sockets headers:

#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

So the thing I'm looking for is something like that _WINDOWS macro.


Solution

  • Your best bet is to use

    _WIN32
    

    It is guaranteed to be defined when compiling for a 32-bit or 64-bit Windows platform using the Visual C++ compiler. I would expect other compilers for Windows to define it as well (the Intel C++ compiler defines it, as does the MinGW gcc).