[理解] C++ 中的 源文件 和 头文件
我是学 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++ 中的 源文件 和 头文件的更多相关文章
- 对c&c++源文件和头文件分开的好处的一点认识
对c&c++程序来说,基本上来说都是要把源文件和头文件分别编写.一般都是代表一个基本功能的源文件引用相应的头文件. 一个 相关功能的模块可能有若干对源文件和头文件组成.这是基于组件编程的核心. ...
- 浅谈VC++中预编译的头文件放那里的问题分析
用C++写程序,肯定要用预编译头文件,就是那个stdafx.h.不过我一直以为只要在.cpp文件中包含stdafx.h 就使用了预编译头文件,其实不对.在VC++中,预编译头文件是指放到stdafx. ...
- QT5中无法包含Qtgui头文件的问题。
今天新学QT是,从一个ppt中边看边抄边学.前几页还能理解,但到了用纯源码写空白QT工程时,便遇到了一个问题.头文件里包含 #include <QtGui> 但是编译时总是出现下面图一中 ...
- visual c++ 中的stdafx.h头文件的作用
stdafx.h VC工程里面经常见到stdafx.h这个头文件,以前也没有特别注意,但是这个文件用不好经常会出错,所以就GOOGLE了一下,总算是弄清楚了... stdafx的英文全称为:Stand ...
- linux 中常用的一些头文件
#include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...
- 【C语言】中的stdbool.h头文件
C语言中的stdbool.h头文件 一.相关基础知识 二.具体内容 Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Vi ...
- QT:创建一个widget,包含源文件,头文件,以及ui文件
1. 安装QT 2. 在QT Welcome画面,点击 New Project 3. 选择Application--Qt Widgets Application 4. 按提示创建即可 文件目录如下: ...
- C源文件和头文件 模版
头文件: /********************************************************************************************** ...
- CPLUSPLUS 获得 一个源文件的头文件依赖。即该文件所需要的所有头文件
核心命令:gcc -M *.h.*.cpp 转: 自动处理头文件的依赖关系 http://blog.csdn.net/su_ocean16/article/details/5374696 现在我们的M ...
随机推荐
- git 多人开发解决步骤
1.pull -- 开发 -- pull -- 解决冲突(如果有) -- commit -- push (PS 老子今天很烦躁)
- FreeRTOS学习笔记2:列表
list.h 列表结构List_t 列表:主要看三个 xLIST:1.5检查列表完整性的.但是需要开启.默认不开启 2:记录列表中列表项的 数量:3:记录当前列表项 索引号:4:列表中的最后一个 列表 ...
- vue 循环多个标签,点击标签变色,再点击取消,可以同时点击多个
效果: <div class="relFacilityTitcon"> <i v-for="(item,index) in facilityList&q ...
- Docker - 周边 - Go Template
概述 docker inspect -f 引出 希望学会后, 可以处理这个命令 问题: 这是啥 疑问 最开始, 我以为是 jsonpath 后来看 命令行的解释, 说叫 go template 但是我 ...
- python pylab.plot() 方法使用
Python 中用pylab模块, pylab.plot() 函数,绘制折线统计图 import pylab as pl x = [, , , ] y = [, , , ] ''' plot参数说明: ...
- Uva 136 丑数
n^2暴力就完事,但是上限要高,不然就算不到对应的1500,刘汝佳的写法更好. #include <bits/stdc++.h> using namespace std; const in ...
- AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换
一.Flutter AppBar 自定义顶部按钮图标.颜色 leading 在标题前面显示的一个控件,在首页通常显示应用的 logo:在其他界面通常显示为返回按钮 title 标题,通常显示为当 ...
- (学习1)最小生成树-Prim算法与Kruskal算法
最小生成树: 求一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 1:Prim算法(适合稠密图) 伪代码: Prim(G){ //G ...
- firefox插件hostadmin自由切换host
在Mac下firefox插件hostadmin切换host,遇到的第一个问题就是提示权限不足,解决办法,在终端输入以下命令即可: sudo chmod og+w /etc/hosts chmod修改权 ...
- ios 底部用定位 fixed。在软件盘出来后,页面元素被顶上去一部分,fixed定位的footer也跑到了上面去。解决方法
ios 底部用定位 fixed.在软件盘出来后,页面元素被顶上去一部分,fixed定位的footer也跑到了上面去.解决方法 $("input").focus(function() ...