zl程序教程

您现在的位置是:首页 >  其它

当前栏目

条件编译

编译 条件
2023-09-11 14:20:37 时间

何谓条件编译?

条件编译又叫预处理程序,包括宏,都是在程序编译前做的一些必要的处理,这些都不是程序的实际功能代码,而仅仅是告诉编译器需要进行的特定操作

一般一个.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语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。宏定义和操作符的区别是:宏定义是替换,不做计算,也不做表达式求解。