代码示例:
#ifdef __GNUC__
// GNU C Compiler
// 添加 GNU C Compiler 编译标志
#define COMPILER_FLAGS "-Wall -O2"
#elif _MSC_VER
// Microsoft Visual C++ Compiler
// 添加 Microsoft Visual C++ 编译标志
#define COMPILER_FLAGS "/W4 /O2"
#else
// 未知编译器
#error "Unknown compiler"
#endif
说明: 在不同的编译器上,虽然代码的语法和语义都是相同的,但是不同的编译器有着不同的编译标志(compiler flags),这些标志会影响编译器在编译时采取的优化策略、处理方式等。
为了解决这个问题,一种可行的方法是使用预处理指令(preprocessor directive)来针对不同的编译器添加不同的编译标志。
上面的代码示例中,我们使用了 __GNUC__
和 _MSC_VER
两个预处理变量来判断当前使用的编译器是 GNU C Compiler 还是 Microsoft Visual C++ Compiler,然后针对不同的编译器添加不同的编译标志。
需要注意的是,我们在代码示例中使用了 #error
预处理指令来处理未知编译器的情况。如果当前使用的编译器不是 GNU C Compiler 也不是 Microsoft Visual C++ Compiler,编译器就会抛出一个错误,以便我们及时发现并处理这种情况。