1 作用
防止重复定义
2 原因
在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,多个c文件包含同一个h文件也不会报错。
而在c++语言中,#ifdef的作用域只是在单个文件中。所以如果h文件里定义了全局变量,即使采用#ifdef宏定义,多个c文件包含同一个h文件还是会出现全局变量重定义的错误。
使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错误。
3 用法
#ifndef x //先测试x是否被宏定义过
#define x
程序段1blabla~ //如果x没有被宏定义过,定义x,并编译程序段 1
#endif
程序段2blabla~ //如果x已经定义过了则编译程序段2的语句,“忽视”程序段
#ifdef x
程序1blabla~ //如果宏定义了x,则执行程序1
#endif
#ifndef x
#define x
程序段 1 //当x没有由#define定义过,则编译“程序段1”,否则编译“程序段2”
#else
程序段 2
#endif
#if 表达式
程序段 1 //当“表达式”值为真时。编译程序段1。否则则编译程序段2。当没有程序段2时,直接是#if---#endif
#else
程序段 2
#endif