今天看了一段程序,里面有 #ifndef ... 这个标识符。
#ifndef 一般是和 #endif 结合使用的,一般的,当一个文件包含几个头文件时,而且每个头文件都可能定义了相同的宏,使用#ifndef可以防止对该宏重复定义。
#ifndef x
//先测试x是否被宏定义过,#ifndef的反义词是#ifdef #ifndef通常定义以前从未定义过的常量。没错是常量!!
#endif
//如果已经定义了则编译#endif后面的语句
条件指示符#ifndef 检查预编译常量在前面是否已经被宏定义。如果在前面没有被宏定义,则条件指示符的值为真,于是从#ifndef 到#endif 之间的所有语句都被包含进来进行编译处理。相反,如果#ifndef 指示符的值为假,则它与#endif 指示符之间的行将被忽略。
条件指示符#ifndef 最主要目的是防止头文件的重复包含和编译。
const 与 #define的比较
C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:
(1) const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
(2) 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调