博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么要存在头文件?
阅读量:6000 次
发布时间:2019-06-20

本文共 674 字,大约阅读时间需要 2 分钟。

hot3.png

    头文件即.h文件,当我们编译代码时,只编译.c、.cpp文件(即源文件),头文件不会参与编译,所以可能有人就会问了,为什么还有存在头文件呢?

    要回答这个问题,我们先来讲一下具体的编译的流程。

    c++支持“分别编译”。也就是说,一个程序所有的内容可以分成不同的部分,分别写在不同的.cpp文件中。

    编译时,不需要与其他文件互通。对于一个文件中调用的函数(必须要先声明),如果找不到定义,那么编译器会生成一个“符号表”,将函数名放入其中,等到链接时,链接器会在其他文件中寻找这个符号的定义,并链接。

    这种机制给c++程序员带来好处,好处就是不用把所有代码都写进一个文件,变成一坨。但是也带来一个问题。一个函数还好,只需要一句声明,但是如果有很多个函数,那么就要写上如此冗长的声明语句,这根本不现实。

    一种解决方法是把这些声明语句写在单独的一个文件中,等到哪个文件需要调用这些函数时,再把这些语句复制到该文件中,但是很显然,这种方法太笨拙。

    所以头文件就诞生了!虽然叫头文件,其实也是源代码,只是不被编译。我们把那些声明语句放在头文件中,当某个文件需要他们时,就用#include宏包含这个头文件,当编译开始前,编译器会先把#include出现的地方自动替换为所包含文件的内容(即那些声明语句),这样就省却了我们手动复制代码的痛苦。

    所以头文件中的语句只能是声明语句,不可以定义。如果写了定义语句,当多个文件包含这个头文件时,就出现了重复定义,当然这是不允许的。

转载于:https://my.oschina.net/xunxun/blog/482882

你可能感兴趣的文章
UVA 10620 - A Flea on a Chessboard(鸽笼原理)
查看>>
electron 的中文文档的地址 以及 窗口改变的步骤
查看>>
分享:APK高级保护方法解析(三)
查看>>
省一行是一行:在if语句中使用C# 7.0的模式匹配
查看>>
Leetcode41: Remove Duplicates from Sorted List
查看>>
实现TextView中link的点击效果
查看>>
S1 商品信息管理系统
查看>>
树莓派进阶之路 (012) - 关于Raspberry Pi树莓派无线网卡配置
查看>>
Visual C++文件后缀名释义
查看>>
hdu 4932 Miaomiao's Geometry(暴力枚举)
查看>>
django Proxy models ---- 代理模式
查看>>
SwipeRefreshLayout与ViewPager滑动事件冲突解决
查看>>
cocos2d_x_01_环境搭建
查看>>
JTCalendar
查看>>
SwipeListView 具体解释 实现微信,QQ等滑动删除效果
查看>>
关于ffmpeg的安装具体步骤和说明
查看>>
重学数据结构系列之——平衡树之SB Tree(Size Blanced Tree)
查看>>
【freeradius2.x】 安装和学习
查看>>
SQL2012 尝试读取或写入受保护的内存。这通常指示其它内存已损坏
查看>>
typedef,结构体,共用体,联合体
查看>>