【C++】关于头文件的一些事情

前言

我们在写C++的时候,通常是将定义写在.cpp文件内,将声明写在.h(header)文件内。自从我开始写C++以来,将近两年时间都是这么写的,也从来没考虑过为什么要这么写,以为这就是一个约定。最近用python写了几个月的毕业设计,C++都快忘光了,找个视频重新捡起来,视频里讲的很详细。这篇文章将我看过的有关头文件的部分进行一下梳理和总结。

参考视频地址

http://bit.ly/2kumpdb(原地址)
https://www.bilibili.com/video/av68697716?p=1(B站搬运+翻译版)

本文内容:

1.#include的作用

2.为什么在头文件里写函数声明

3.#program once和#ifndef等等



1.#include的作用

当我们看到#include这行语句开头的“#”,就可以知道这是一句“预处理”语句,在C++生成可执行文件的过程中,要经过编译和链接两个步骤。在编译过程中,很重要的一步就是对这些预处理语句进行处理,比如我们熟悉的#define要在这个编译之前进行宏替换,这就是预处理的一部分,所有的以“#”开头的语句都会在这个时候进行处理,生成我们需要的代码送入后续步骤。因此我们要看一下对于一个简单的程序,我们#include一个头文件后再编译,它会生成什么样的代码。
//main.cpp
#include <iostream>

int main()
{
   
	return 0;
}

上面就是这段代码,什么也没有做,只是include一个我们入门C++时都会用到的头文件。接下来我们需要调整项目属性设置,使其编译结果输出到文件。右键项目->属性->C/C++ ->预处理器->预处理到文件(本节结束记得改回去,否则编译完无法生成.obj文件
在这里插入图片描述
然后单独进行编译(ctrl+F7,不是F5),在项目Debug目录下就可以看到后缀名为.i的文件,我们将它拖到VS中进行显示,可以看到这个编译结果居然有5W多行!也就是说真正送到后面步骤进行处理的代码是这5W多行,而我们自己写的main在最后。
在这里插入图片描述
为什么我们只写了几行代码+include,编译生成的代码这么多行呢?这就和本节标题有关了:#include究竟做了些什么?答案其实很简单,编译器对于#include的处理就是把该文件的内容直接copy过来!而iostream是标准库的头文件,里面包含了太多东西,这才造成最终生成的代码量极大。
下面可以做一个有意思的事情,我们创建一个nothing.h文件,里面只写

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值