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?

Original source