条件编译有几种典型的使用场景.如增加代码的移植性,根据不同的条件(环境变量,编译参数等),编译出不同平台的代码,如: #ifdef __linux__ //linux code goes here #elif _WIN32 // windows code goes here #else #endif 另一种典型的情况,通常在头文件的开头看到这样的代码: #ifndef HEADERFILE_H #define HEADERFILE_H 并且在文件末尾是 #endif 这些被称为#include守护。 包含标头后,它将检查是否定义了唯一值(在这种情况下为HEADERFILE_H)。然后,如果未定义,则定义它并继续到页面的其余部分。 当再次包含该代码时,第一个ifndef失败,从而导致文件空白。 这样可以防止对任何标识符(例如类型,枚举和静态变量)进行双重声明。 它还可以防止递归包含...想象一下“ alice.h”包括“ bob.h”,“ bob.h”包括“ alice.h”,并且其中没有警卫, 编译器将无法完成编译预处理.
条件编译有几种典型的使用场景.
如增加代码的移植性,根据不同的条件(环境变量,编译参数等),编译出不同平台的代码,如:
另一种典型的情况,
通常在头文件的开头看到这样的代码:
并且在文件末尾是
这些被称为#include守护。
包含标头后,它将检查是否定义了唯一值(在这种情况下为
HEADERFILE_H
)。然后,如果未定义,则定义它并继续到页面的其余部分。当再次包含该代码时,第一个
ifndef
失败,从而导致文件空白。这样可以防止对任何标识符(例如类型,枚举和静态变量)进行双重声明。
它还可以防止递归包含...想象一下“ alice.h”包括“ bob.h”,“ bob.h”包括“ alice.h”,并且其中没有警卫, 编译器将无法完成编译预处理.