How to detect LLVM and its version through #define directives?
c, c-preprocessor, clang, llvm
Solution
The `__llvm__` and `__clang__` macros are the official way to check for an LLVM compiler (llvm-gcc or clang) or clang, respectively.
`__has_feature` and `__has_builtin` are the recommended way of checking for optional compiler features when using clang, they are documented here.
Note that you can find a list of the builtin compiler macros for gcc, llvm-gcc, and clang using:
echo | clang -dM -E -
This preprocesses an empty string and spits out all macros defined by the compiler.
Problem
The question is quite clear I think. I'm trying to write a compiler detection header to be able to include in the application information on which compiler was used and which version. This is part of the code I'm using: ``` /* GNU C Compiler Detection */ #elif defined __GNUC__ #ifdef __MINGW32__ #define COMPILER "MinGW GCC %d.%d.%d" #else #define COMPILER "GCC %d.%d.%d" #endif #define COMP_VERSION __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__ #endif ``` Which could be used like this: ``` printf(" Compiled using " COMPILER "\n", COMP_VERSION); ``` Is there any way to detect LLVM and its version? And CLANG?