Compiler projects using llvm
// #pragma push_macro/pop_macro
#define INCLUDE_A
#pragma push_macro("INCLUDE_A")
#undef INCLUDE_A
#pragma pop_macro("INCLUDE_A")

#ifdef INCLUDE_A
#include "a.h"
#endif

// #pragma push_macro/pop_macro with argument macro expansion
#define INCLUDE_B
#define MACRO_NAME "INCLUDE_B"

#pragma push_macro(MACRO_NAME)
#undef INCLUDE_B
#pragma pop_macro(MACRO_NAME)

#ifdef INCLUDE_B
#include "b.h"
#endif

// #pragma include_alias (MS specific)
// When compiling without MS Extensions, the pragma is not recognized,
// and the file c_alias.h is included instead of c.h
#pragma include_alias("c_alias.h", "c.h")
#include "c_alias.h"