在C语言头文件里我们如何应用#ifndef

举个例子 我在led.h 头文件里这么写
#ifndef __LED_H
#define __LED_H
.......
......
#endif

1 这样写是如何完成防止重复定义功能的
2 __LED_H 这个宏定义我可以随便命名吗,还是这个#define后面的名字和 头文件led.h 得名字村子某种命名约束
3 在应用头文件中 ifdef 是如何公工作的
 
  
 
  
 
  
答案
 
  
  1.  编译器读到#ifndef __LED_H这一行时会检查当前__LED_H这个字符是否已经被宏定义了,如果是,则忽略其下文直到匹配的#endif;如果没有被宏定义,则继续编译其下文。这样当这个头文件第一次被#include时,编译器发现_LED_H这个字符未被宏定义,则编译余下的内容,第一句就将_LED_H这个字符宏定义,则以后#include时,此头文件就不会再被编译了。

  2. __LED_H这个名字可以任意取(其用来编译时区分是否是第一次被#include),但不能跟别的头文件中的定义重复。

  3. !ifdef __LED_H 的意义跟上面的相同。ifdef表示如果定义了某宏就编译下文直到匹配的#endif,跟ifndef类似的条件编译语句(逻辑正好相反)

 
  
 
  
 
  
ifdef这个宏定义可以防止重复定义
但是如何完成的呢
1 我们在头文件。h中写了这句话,
#ifndef __LED_H
#define __LED_H
.......
......
#endif
如果有多个文件引用了这个.h 文件
这多个文件又包含在同一个文件下。这样我们的ifdef就起作用了。

你可能感兴趣的:(c,C语言,linux)