Search code examples
coperating-systemc-preprocessorconditional-compilation

How do I check OS with a preprocessor directive?


I need my code to do different things based on the operating system on which it gets compiled. I'm looking for something like this:

#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif

Is there a way to do this? Is there a better way to do the same thing?


Solution

  • The Predefined Macros for OS site has a very complete list of checks. Here are a few of them, with links to where they're found:

    Windows

    _WIN32   Both 32 bit and 64 bit
    _WIN64   64 bit only
    __CYGWIN__

    Unix (Linux, *BSD, but not Mac OS X)

    See this related question on some of the pitfalls of using this check.

    unix
    __unix
    __unix__

    Mac OS X

    __APPLE__ Also used for classic
    __MACH__

    Both are defined; checking for either should work.

    Linux

    __linux__
    linux Obsolete (not POSIX compliant)
    __linux Obsolete (not POSIX compliant)

    FreeBSD

    __FreeBSD__

    Android

    __ANDROID__