[理解] 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 ...
随机推荐
- Codeforces Round #624 (Div. 3) F
题意: 给出n的质点,带着初位置和速度: 如果中途两点可以相遇dis(i,j)=0: 如果不可以相遇,mindis(i,j): 求n个点的两两质点最小dis(i,j)之和 思路: 因为当初位置x和速度 ...
- 【资源分享】RPG Maker 2000/2003 简体中文版
*----------------------------------------------[下载区]----------------------------------------------* ...
- 1042B. Vitamins
Berland shop sells nn kinds of juices. Each juice has its price cici. Each juice includes some set o ...
- Python变量理解
变量进阶(理解) 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变 ...
- 多表更新:update,join
1.多表更新: 下面我建两个表,并执行一系列sql语句,仔细观察sql执行后表中数据的变化,很容易就能理解多表联合更新的用法. 前期准备工作: update join_teacher_class jo ...
- 忽视自身问题并“积极甩锅”,新氧CEO金星还要脸吗?
编辑 | 于斌 出品 | 于见(mpyujian) "互联网医美第一股"新氧果然还是爆雷了. 说"果然"是因为于见曾经针对新氧目前的商业模式进行过分析,认为以新 ...
- FILES源代码
FILESの源码 #include <bits/stdc++.h> #include <game.h> #define pause getchar(); #define c ...
- yum源文件
yum源文件 2017年11月22日 11:59:36 cakincqm 阅读数 1052更多 分类专栏: Linux 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附 ...
- htm5实现 文件夹上传
观察百度云上传,可以看到input type=file 的标签上加个一个属性“webkitdirectory”,加上次属性即可选择整个文件夹.
- Spring IoC 源码分析 (基于注解) 之 包扫描
在上篇文章Spring IoC 源码分析 (基于注解) 一我们分析到,我们通过AnnotationConfigApplicationContext类传入一个包路径启动Spring之后,会首先初始化包扫 ...