恩智浦学习笔记(1)——头文件与源文件

恩智浦学习笔记(1)——头文件与源文件

这是补上次的~
/*********************************************************/
1,头文件可以定义所用的函数列表,方便查阅你可以调用的函数;
2,头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。
3,头文件只是声明,不占内存空间,要知道其执行过程,要看你头文件所申明的函数是在哪个.c文件里定义的,才知道。
4,他并不是C自带的,可以不用。
5,调用了头文件,就等于赋予了调用某些函数的权限,如果你要算一个数的N次方,就要调用Pow()函数,而这个函数是定义在math.c里面的,要用这个函数,就必需调用math.h这个头文件。
/************************************************************/
一般来说头文件里一般放的是函数文件或函数体.
一般都在头件中进行函数,变量声明,宏声明,结构体声明。在C文件中去进行变量定义,函数实现。???why
{
1.如果在头文件中实现一个函数体,那么如果在多个C文件中引用它,而且又同时编 译多个C文件,将其生成的目标文件连接成一个可执行文件,在每个引用此头文件的C文件所生成的目标文件中,都有一份这个函数的代码,如果这段函数又没有定 义成局部函数,那么在连接时,就会发现多个相同的函数,就会报错 。

2.如果在头文件中定义全局变量,并且将此全局变量赋初值,那么在多个引用此 头文件的C文件中同样存在相同变量名的拷贝,关键是此变量被赋了初值,所以编译器就会将此变量放入DATA段,最终在连接阶段,会在DATA段中存在多个 相同的变量,它无法将这些变量统一成一个变量,也就是仅为此变量分配一个空间,而不是多份空间,假定这个变量在头文件没有赋初值,编译器就会将之放入 BSS段,连接器会对BSS段的多个同名变量仅分配一个存储空间 。

3.如果在C文件中声明宏,结构体,函数等,那么我要在另一个C文件中引用相 应的宏,结构体,就必须再做一次重复的工作,如果我改了一个C文件中的一个声明,那么又忘了改其它C文件中的声明,这不就出了大问题了,程序的逻辑就变成 了你不可想象的了,如果把这些公共的东东放在一个头文件中,想用它的C文件就只需要引用一个就OK了!!!这样岂不方便,要改某个声明的时候,只需要动一 下头文件就行了 。

4.在头文件中声明结构体,函数等,当你需要将你的代码封装成一个库,让别人来用你的代码,你又不想公布源码,那么人家如何利 用你的库呢?也就是如何利用你的库中的各个函数呢??一种方法是公布源码,别人想怎么用就怎么用,另一种是提供头文件,别人从头文件中看你的函数原型,这 样人家才知道如何调用你写的函数,就如同你调用printf函数一样,里面的参数是怎样的??你是怎么知道的??还不是看人家的头文件中的相关声明 啊!!!当然这些东东都成了C标准,就算不看人家的头文件,你一样可以知道怎么使用。

/****就是说头文件定义一些东西在引用 方面有不可磨灭的好处,修改时也比较方便清晰(声明类东西改下头文件就把所有的给改了),引用函数啥的也比较方便。并且可以实现代码的隐蔽性(接口对外,实现代码不可见)
}
#ifndef _名称_h //必须有
#define _名称_h
。。。
#endif
/*****************************************************************/
编译器的工作过程
1.预处理阶段
2.词法与语法分析阶段
3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)
4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息。(生成.exe文件)
编译器在编译时是以C文件为单位进行的,在PC上的程序开发,一般都有一个main函数。
学程序的都知道函数的重要性,集成化,便于运用,而头文件的作用我认为就是让函数在调用方面更加简洁,方便。
为了避免每次都要写太多头文件,一般把很多头文件集成下放进一个头文件中。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页