手机版
您的当前位置: 留琼范文网 > 范文大全 > 公文范文 > 头文件和源文件区别 任命文件和任职文件区别

头文件和源文件区别 任命文件和任职文件区别

来源:公文范文 时间:2022-03-21 12:53:46 点击: 推荐访问: 任命文件和任职文件 任命文件和任职文件区别 区别

下面是小编为大家整理的头文件和源文件区别 任命文件和任职文件区别,供大家参考。

头文件和源文件区别 任命文件和任职文件区别

 

 c 语言笔记--头文件和源文件的区别

  首先,我们可以将所有东西都放在一个.cpp 文件内.

 然后编译器就将这个.cpp 编译成.obj,obj 是什么东西?

 就是编译单元了.一个程序,可以由一个编译单元组成,

 也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话,

 就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上

 就可以分别放在一个单元,也就是 cpp 里面)

 那么就是一个.cpp 对应一个.obj,然后将所有的 obj 链接起来(通过一个叫链接器的程序),

 组成一个.exe,也就是程序了.

 如果一个.cpp 要用到另一个.cpp 定义的函数怎么办? 只需在这个.cpp 种写上他的函数声明

 就可以了.其余工作由链接器帮你完成,你可以随便调用该函数.

 链接器将所有的 obj 连接起来,但是如果碰巧有相同的函数或外部变量怎么办?他如何识别?

 一般来说是不能允许在同一个程序中,出现两个一样的函数名或外部变量名.

 但是只得庆幸的是,c++可以通过一种叫做链接属性的关键字来限定,你这个函数是属于整个程序

 公用的,还是只是在一个编译单元 obj 里面使用的.

 这些关键字就是 extern 和 static; extern 是外部链接的意思,也就是除了这个单元,外部的单元

 也是能够访问这个函数的.static 是内部链接,自属于自己单元.

 说了这么久,还没有说.h 的作用呢?

 其实没有.h 也能很好的工作,但是当你发现一个外部链接的函数或外部变量,需要许多份

 声明,因为 c++这种语言,在使用函数和变量的时候,必须将他声明,为何要声明?声明之后才

 知道他的规格,才能更好的发现不和规格的部分.你别妄想一个编译单元,会自动从另一个

 编译单元那里得到什么信息,知道你是如何定义这个函数的.

 所以说,只要使用到该函数的单元,就必须写一份声明在那个.cpp 里面,这样是不是很麻烦,

 而且,如果要修改,就必须一个一个修改.这真让人受不了.

 .h 就是为了解决这个问题而诞生,他包含了这些公共的东西.然后所有需要使用该函数的.cpp,只需要

 用#include 包含进去便可.以后需要修改,也只是修改一份内容.

 请注意不要滥用.h,.h 里面不要写代码,.h 不是.cpp 的仓库,什么都塞到里面.

 如果在里面写代码,当其他.cpp 包含他的时候,就会出现重复定义的情况,

 比如将函数 func(){printf};放到头文件 a.h,里面还有一些 a.cpp 需要的声明等;

 然后你发现 b.cpp 需要用到 a.cpp 里面的一个函数,就很高兴的将 a.h 包含进来.

 注意,#include 并不是什么申请指令,他就是将指定的文件的内容,原封不动的拷贝

 进来.

 这时候实际上 a.cpp 和 b.cpp 都有一个 func()函数的定义.

 如果这个函数是内部链接 static 的话,还好,浪费了一倍空间;

 如果是 extern,外部链接(这个是默认情况),那么根据在同一个程序内不可出现

 同名函数的要求,连接器会毫不留情给你一个连接错误!

 ;如果你还不太理解.那么就尝试不用 h,只用多个 cpp 看看应该如何写.

 尝试在两个 cpp 中写同名函数.看看是否链接出错.

 尝试在 cpp 使用其他 cpp 定义的函数.看看应该如何做. 头文件是没有编译意义的,一般只是编译.cpp 生成.obj.

 但是.cpp 里面有#include 将指定头文件(其实任何文件都行)插进来,组成完整的.cpp.

 如果你不喜欢这个方式,你也可以直接在.cpp 里面写好了,而不放到.h 里面,载用指令

  拷贝进来.

 头文件是工具,但不是必须.

留琼范文网 www.bjcnart.com

Copyright © 2002-2018 . 留琼范文网 版权所有

Top