c++32bit-64bitconditional-compilation

Determining 32 vs 64 bit in C++


I'm looking for a way to reliably determine whether C++ code is being compiled in 32 vs 64 bit. We've come up with what we think is a reasonable solution using macros, but was curious to know if people could think of cases where this might fail or if there is a better way to do this. Please note we are trying to do this in a cross-platform, multiple compiler environment.

#if ((ULONG_MAX) == (UINT_MAX))
# define IS32BIT
#else
# define IS64BIT
#endif

#ifdef IS64BIT
DoMy64BitOperation()
#else
DoMy32BitOperation()
#endif

Thanks.


Solution

  • Unfortunately there is no cross platform macro which defines 32 / 64 bit across the major compilers. I've found the most effective way to do this is the following.

    First I pick my own representation. I prefer ENVIRONMENT64 / ENVIRONMENT32. Then I find out what all of the major compilers use for determining if it's a 64 bit environment or not and use that to set my variables.

    // Check windows
    #if _WIN32 || _WIN64
    #if _WIN64
    #define ENVIRONMENT64
    #else
    #define ENVIRONMENT32
    #endif
    #endif
    
    // Check GCC
    #if __GNUC__
    #if __x86_64__ || __ppc64__
    #define ENVIRONMENT64
    #else
    #define ENVIRONMENT32
    #endif
    #endif
    

    Another easier route is to simply set these variables from the compiler command line.