我是学 C井 的, 现在在工作中主要使用的编程语言是 Java, 还记得当初在第一次接触到 Cpp 的时候, 听到的第一个概念就是 Cpp 的头文件和源文件, 当初理解了好久, 死活都弄不明白, 现在好歹是理解一点了, 做个笔记

  在说头文件和源文件之前, 先来说一下 Cpp 大概的源文件编译过程吧, 新建一个文件 Source.cpp, 然后写

#include <iostream>
using namespace std;
int main(){
 cout << "hello world" << endl;
return ;
}

1): 编译开始前, 预处理语句 #include 会将 iostream 文件里的内容拷贝到当前的文件里, 然后使用  iostream 里的 cout 函数

2): Source.cpp 文件会被挨个单独编译为 .obj 文件   这个文件在项目的 debug 文件夹下

3): 然后 linker 会去找 cout 函数的定义, 因为 #include 已经将 iostream 拷贝到 Source.cpp 文件下了, 所以 linker 会在 Source.obj 里查找 cout 的定义, 并且跟 main 函数里调用的 cout 函数联系起来, 构成一个 .exe 可执行文件

compiling(编译) 和 linker(链接) 会将我们编写的 Cpp 项目文件构建成一个抽象语法树, ,再编译成 CPU 可读的机器码,  然后变成一个可执行文件

所以, 只有 源文件 .cpp 会被编译器编译, 而头文件 .h 是不会被编译的

头文件  Header.h ----> 就是将重复到的函数抽象出来放在一个文件中, 这个文件也要进行相应的归类

源文件 Source.cpp --> 就是编译器进行编译的文件,

非要理解的话, 头文件就是存放 Java 里实现 interface 的函数的文件, 注意, 是已经实现, 不是 interface , 在 Java 中

public interface Math{
public int function(int a, int b);
}

然后在实现这个接口

public class MathImpl implement Math{
public int function(int a, int b){
int result = a * b;
return result;
}
}

但是在 Cpp 的头文件里, 则写的可能是

int function(int a, int b){
int result = a * b;
return result;
}

当源文件想要调用这个乘法的函数的时候, 只要

#include "Hread.h"

int main(){
function(, );
return ;
}

这样在编译的时候就会变成

int function(int a, int b){
int result = a * b;
return result;
} int main(){
function(, );
return ;
}

所以头文件大概就是这样用的吧, 不过我想 .cpp 文件也能实现这样的效果啊, 为什么非要专门用一个 .h 文件呢? 我想大概一个是为了规范, 还有一个就是 头文件不会被编译, 减少了出错的几率.

浅薄之谈, 欢迎纠错

[理解] C++ 中的 源文件 和 头文件的更多相关文章

  1. 对c&c++源文件和头文件分开的好处的一点认识

    对c&c++程序来说,基本上来说都是要把源文件和头文件分别编写.一般都是代表一个基本功能的源文件引用相应的头文件. 一个 相关功能的模块可能有若干对源文件和头文件组成.这是基于组件编程的核心. ...

  2. 浅谈VC++中预编译的头文件放那里的问题分析

    用C++写程序,肯定要用预编译头文件,就是那个stdafx.h.不过我一直以为只要在.cpp文件中包含stdafx.h 就使用了预编译头文件,其实不对.在VC++中,预编译头文件是指放到stdafx. ...

  3. QT5中无法包含Qtgui头文件的问题。

    今天新学QT是,从一个ppt中边看边抄边学.前几页还能理解,但到了用纯源码写空白QT工程时,便遇到了一个问题.头文件里包含 #include  <QtGui> 但是编译时总是出现下面图一中 ...

  4. visual c++ 中的stdafx.h头文件的作用

    stdafx.h VC工程里面经常见到stdafx.h这个头文件,以前也没有特别注意,但是这个文件用不好经常会出错,所以就GOOGLE了一下,总算是弄清楚了... stdafx的英文全称为:Stand ...

  5. linux 中常用的一些头文件

    #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...

  6. 【C语言】中的stdbool.h头文件

    C语言中的stdbool.h头文件 一.相关基础知识 二.具体内容 Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Vi ...

  7. QT:创建一个widget,包含源文件,头文件,以及ui文件

    1. 安装QT 2. 在QT Welcome画面,点击 New Project 3. 选择Application--Qt Widgets Application 4. 按提示创建即可 文件目录如下: ...

  8. C源文件和头文件 模版

    头文件: /********************************************************************************************** ...

  9. CPLUSPLUS 获得 一个源文件的头文件依赖。即该文件所需要的所有头文件

    核心命令:gcc -M *.h.*.cpp 转: 自动处理头文件的依赖关系 http://blog.csdn.net/su_ocean16/article/details/5374696 现在我们的M ...

随机推荐

  1. php提供下载服务实例

    两个步骤:1,通过header头信息告诉浏览器,我给你回应的是一个附件请接收 2,通过php读取下载的文件的内容并返回 前端 <!DOCTYPE html> <html lang=& ...

  2. 将 master 节点服务器从 k8s 集群中移除并重新加入

    背景 1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,不如将 master 退出集群改名并重新加入集群(前提是用的是高可用集群). 操作步骤 ssh 登 ...

  3. 树链剖分 (ZQU1607)

    这道题与模板之间,多了个确定哪个为根的操作: 这道题有技巧,并不需要真正去建立以某个节点为根的树 关于路径的操作,无论以哪个点为根,得出的答案无影响: 关于对子节点进行操作的,有几种情况, 当查询节点 ...

  4. Bash Game hdu 1846

    (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者 ...

  5. nginx的负载均衡配置

    1.下载nginx的压缩包,可以去官网下载 2.解压缩,可以看到其中有个conf的文件夹,在该目录中,nginx.conf配置文件就是核心配置文件 3.默认配置 #user nobody; worke ...

  6. C4K Power supply failed?

    故障log: %C4K_IOSMODPORTMAN-4-POWERSUPPLYBAD: Power supply 2 has failed or been turned off 在单机的情况下,我们可 ...

  7. 解决teamviewer试用期到期的方法

    Teamviewer是一款远程控制软件,使用过程中系统弹出“Teamviewer试用版已到期”的提示, 需要用户购买许可证或延长试用期才能继续使用,解决teamviewer试用期到期问题步骤如下: 出 ...

  8. Python学习之函数篇

    python查看对象,函数帮助文档:.__doc__,例:str.split.__doc__ 查看详细对象,函数文档:help(),例:help(str.split) 函数参数可设置默认值 如果不能提 ...

  9. LoadRunner通过火狐浏览器录制脚本后,进行回放时,回放脚本很慢

    原因:火狐浏览器在录制的时候,录制了下载插件的脚本 解决办法:在脚本中删除额外资源中的下载代码

  10. ES6-三点运算符

    首先理解一下函数总的arguments变量,这个变量是函数内部自动生成的,他用来保存传入函数的实参,是一个伪数组. 例: function fun(a,b){ console.log(argument ...