何谓条件编译?
条件编译又叫预处理程序,包括宏,都是在程序编译前做的一些必要的处理,这些都不是程序的实际功能代码,而仅仅是告诉编译器需要进行的特定操作
一般一个.c对应一个.h
file.h主要包含:
1.”file.c”中所要使用的一些宏
2.”file.c”中自定义类型的声明
3.”file.c”中定义的全局变量进行extern声明,提供给其他.c使用(必须加extern)
4.”file.c”中定义的函数,提供给其他.c使用(无需加extern)
“file.h” 模板:
/*标识符: 在理论上来说可以是自由命名的,但每个头文件的这个标识符都应该是唯一的。
标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线*/
#ifndef _FILE_H
#define _FILE_H
//---
//---
//--- 一般写自己的自定义变量类型
//---
//---
#ifndef _MAIN_C
//---
//---
//--- 一般写外部变量的声明(必须加extern)
//---
//---
#endif
//---
//---
//--- 一般写外部函数的声明(可以不加extern)
//---
//---
#endif
.c模板
#define _FILE_H
#include "file.h"
...
...
...
**#ifndef的最主要目的是防止头文件以及变量的重复包含和编译
重复包含和编译的危害**
1.使预处理的速度变慢了,要处理很多本来不需要处理的头文件。
2.可能预处理器就陷入死循环了(其实编译器都会规定一个包含层数的上限)。例如h1.h包含h2.h,h2.h又包含h1.h的情况,如果不采用防止头文件的重复定义,那么预处理器就会进入死循环了。
3.头文件里有些代码不允许重复出现。而重复定义头文件会重复出现一些代码。(虽然变量和函数允许多次声明(只要不是多次定义就行),但头文件里有些代码是不允许多次出现的)。例如:使用typedef类型定义和结构体Tag定义等,在一个程序文件中只允许出现一次。
小知识:
宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。宏定义和操作符的区别是:宏定义是替换,不做计算,也不做表达式求解。