.c和 h文件

更新时间:2024-04-14 12:54:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

.C .H 文件

预处理阶段:编译器把C文件作为一个单元,首先读C文件 此时当遇到头文件时,就会在所有路径中搜寻读取到以后,根据头文件中的定义等等进行处理,包括处理宏、变量、声明等,最后生成一个目标文件 当做临时文件,里面存储了以上那些处理的结果。 编译阶段:在刚才生成的文件中,所有的变量等都成为一个全局变量的类型。同时根据生成文件的处理结果,将所有的函数编译成二进制。按照目标文件格式生成目标文件。 连接阶段:将上一步生成的各个目标文件根据某些参数,连接成最终的可执行文件。主要的工作就是重新定位各个目标文件的函数、变量等。

分别在头文件和C文件中做怎样的处理

(一般来说,在头文件个C文件中做以下的声明和定义) 头文件:函数、变量声明 声明宏 结构体声明 等 C文件:变量定义、函数实现 等

1、 如果在头文件中定义一个函数体,同时有多个C文件引用他,并编译多个C文件,

在编译时会将其生成目标文件连接成一个可执行文件。在每个引用头文件的C文件中都会有这个函数的代码。此时如果没有把函数定义为局部变量,在连接时就会发现有多个相同的函数,就会发生错误。

2、 如果在头文件中定义全局变量 并将其赋予了初值。那么在多个引用此头文件的C

文件里面也会出现相同变量名的拷贝。关键的是,这个变量被赋予了初值,会被编译器放到DATA段,最后在连接阶段,会在DATA里面出现多个相同的变量。切无法将其统一,也就是仅为此变量分配一个空间,而不是多份空间。假定这个变量在头文件没有赋初值,编译器就会将之放入 BSS段,连接器会对BSS段的多个同名变量仅分配一个存储空间。故而只在头文件中对变量进行声明,而不是定义。 3、 如果在C文件中声明宏,结构体,函数等。那么在另一个C文件引用时,就需要

再一次定义。如果需要改动C文件的一个声明,就可能出现忘记修改其他基础C文件中的声明,就会出问题。

4、 在头文件声明结构体,函数等。当需要把代码封装成一个库,并让其他人也可以利

用你的代码。但又不想公布全部的代码,此时就可以提供头文件,让人们看里面的函数原型,便可以知道怎么调用你的函数。

对于.h文件(头文件)和.c文件在本质上没有太大的区别。头文件,内含函数声明、宏定义、结构体定义等内容。.c文件是程序文件,内含函数实现,变量定义等内容。

举例说明:在同一文件目录下,定义了C文件和头文件。并在头文件下声明了某个函数,在C文件#include了这个头文件。并在C文件中定义了这个函数的实现。那么在main函数运行时就能找到这个函数。

假定编译程序编译myproj.c(其中含main())时,发现它include了mylib.h(其中声明了函数void test()),那么此时编译器将按照事先设定的路径(Include路径列表及代码文件所在的路径)查找与之同名的实现文件(扩展名为.cpp或.c,此例中为mylib.c),如果找到该文件,并在其中找到该函数(此例中为void test())的实现代码,则继续编译;如果在指定目录找不到实现文件,或者在该文件及后续的各include文件中未找到实现代码,则返回一个编译错误.其实include的过程完全可以\看成\是一个文件拼接的过程,将声明和实现分别写在头文件及C文件中,或者将二者同时写在头文件中,理论上没有本质的区别。 【动态方式】

关于调用顺序,C语言要求函数使用之前,必须声明。那么就会出现当一个函数需调用同一个C文件下的其它函数,切形成多级的嵌套时,便需要考虑复杂的调用顺序。但如果首先使用#include将同名的头文件调用,则不必考虑调用顺序的麻烦。

本文来源:https://www.bwwdw.com/article/i7np.html

微信扫码分享

《.c和 h文件.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top