<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
#define 定义一个预处理宏
#undef 取消宏的定义
#if 编译预处理中的条件命令,相当于C语法中的if语句
#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef 与#ifdef相反,判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.
defined 与#if, #elif配合使用,判断某个宏是否被定义
直接上栗子:
#include<iostream>
using namespace std;
#define MAX 100
#define MIN 0
#define MID 50
#ifndef MAX //如果没有定义MAX #ifdef 如果定义了宏
int cnt = 1;
#elif (MIN == 0) //相当于else if
int cnt = 2;
#elif MID == 50
int cnt = 3;
#endif
int main()
{
cout << "cnt = " << cnt << endl;
return 0;
}
其中 #ifdef #elif #endif 相当于C语言中的if..else if .. else 结构
注意:
1.#endif 不完全等同于else 这里#endif可以当结构结尾使用 下面也可以什么都不写 也可以写语句。
2. 这里的定义是发生在条件成立之中的 如果所有条件都不成立 则变量没有被定义 不能使用。
3.#elif 后面不仅判读是否定义 同时判读其值 如果不给判断值的 默认为0
4.这种结构 一定要有#endif
#include<iostream>
using namespace std;
#define MAX 100
#define MIN 0
#define MID 50
#ifndef MAX //如果没有定义MAX
int cnt = 1;
#elif (MIN == 10) //相当于else if
int cnt = 2;
#elif MID == 500
int cnt = 3;
#endif
int cnt = 4;
int main()
{
cout << "cnt = " << cnt << endl;
return 0;
}
这里如果把#endif下面的语句去掉 则会报错