举个例子 我在led.h 头文件里这么写 #ifndef __LED_H #define __LED_H ....... ...... #endif1 这样写是如何完成防止重复定义功能的 2 __LED_H 这个宏定义我可以随便命名吗,还是这个#define后面的名字和 头文件led.h 得名字村子某种命名约束 3 在应用头文件中 ifdef 是如何公工作的
答案
编译器读到#ifndef __LED_H这一行时会检查当前__LED_H这个字符是否已经被宏定义了,如果是,则忽略其下文直到匹配的#endif;如果没有被宏定义,则继续编译其下文。这样当这个头文件第一次被#include时,编译器发现_LED_H这个字符未被宏定义,则编译余下的内容,第一句就将_LED_H这个字符宏定义,则以后#include时,此头文件就不会再被编译了。
__LED_H这个名字可以任意取(其用来编译时区分是否是第一次被#include),但不能跟别的头文件中的定义重复。
!ifdef __LED_H 的意义跟上面的相同。ifdef表示如果定义了某宏就编译下文直到匹配的#endif,跟ifndef类似的条件编译语句(逻辑正好相反)
ifdef这个宏定义可以防止重复定义
但是如何完成的呢
1 我们在头文件。h中写了这句话,#ifndef __LED_H #define __LED_H ....... ...... #endif如果有多个文件引用了这个.h 文件这多个文件又包含在同一个文件下。这样我们的ifdef就起作用了。