读书,得啃着读、硬着头皮读,慢慢读,切不可操之过急呀!
这是我特别想告诉自己并让自己坚持的一句话,最近发现自己学习过于浮躁,过于最求速度、成果,却忘记了学习是需要循序渐进的,需要稳扎稳打的!
本篇内容是边看书边记录的.
编写大型程序
大多的大程序都是由多个文件组成的。常见的程序是由多个源文件组成,通常还有一些头文件。
源文件包含函数的定义和全局变量(或者叫做外部变量)
头文件包含可以在源文件之间共享的信息
1.源文件
之前我写的c程序都是由单独一个文件组成的,其实我们可以把程序分割成任意数量的源文件。源文件的拓展名为.c,每个源文件都包含部分程序内容(主要是函数和变量的定义)。其中的一个源文件必须包含main函数,main函数是程序的起点!
把程序分为多个源文件的优点:
1>把线管的函数和变量分组放在同一个文件中可以使程序的结构更加清晰
2>可以分别对每一个源文件进行编译。如果程序规模很大而且需要频繁改变(这一点在程序开发过程中是非常普遍的现象),这种方法可以极大的节约时间
3>有利于函数的复用。
2.头文件
当我们把程序分为几个源文件时,会产生这样的问题:某文件中的函数如何调用定义在其他文件中的函数呢,如何访问其他文件中的外部变量呢?两个文件如何共享同一个宏或者类型定义呢?
那就是用#include 指令。
#include 指令告诉预处理器打开指定的文件,并且把该文件内容插入到当前的文件中。
#include指令
#include指令有两种形式
① # include <文件名>//这种形式只用于C语言自身库的头文件
② # include "文件名"//这种形式用于我们自己的源代码文件
其实还可以使用 # include 路径(其可移植性比较差,当然了也可以使用相对路径来解决可移植性的问题)这里不说那么细
3.共享宏定义、共享类型定义、共享函数原型、共享声明变量
1>共享宏定义、类型定义
若多个源文件都需要用到一个宏或者一个类型,可以把这些宏和类型放到一个.h文件中,然后在所需要他们的源文件中#include " .h" 这个.h文件即可。
2>共享函数原型
共享的是声明!(而不是函数的定义,函数的定义是放在一个.c文件中的)
和上面一样,把要使用的.c源文件中的函数的声明都放到一个.h文件中,然后在main.c文件中#include" .h"即可,通常包含函数的.c文件也需要包含以下头文件(它的函数声明。为了验证.c文件中定义的函数是否与.h中的函数声明相匹配)
3>共享声明变量(外部变量)
和共享函数声明类似,只不过需要在 变量声明前加一个 extern ,如extern int i ; extern让编译器知道这里声明了一个变量 i,它可能在别的.c文件中被定义了,需要去找。注意,声明是不需要消耗内存的,而定义是需要分配内存空间的。
4.头文件保护
在C语言中,若源文件包含一个头文件两次就有可能产生编译错误。(比如说a.h包含c.h,b.h包含c.h而main中include"a.h"和"b.h",这时,b.h被两次包含就会出现编译错误)。
对于以上问题的解决办法是:使用宏定义和条件编译。
比如:c.h文件
#ifndef C_H//如果不存在宏c_H
#define C_H
void max(int a,int b);//某函数的声明
#endif
这样就可以保护头文件啦。