创建头文件的三个步骤

以实现一个swap函数为例:

1、创建一个.h的头文件:里面允许存放类声明和函数声明

// swap.h
#pragma oncevoid swaps(int a, int b);

2、创建一个.cpp的源文件,源文件里面写头文件中声明了的函数的结构体(函数定义)

头文件与定义了头文件中函数声明的源文件并不需要文件名字相同,但是为了规范起见,建议命名
那么头文件是如何关联源文件的呢?

这个问题实际上是说,已知头文件“a.h”声明了一系列函数,“b.cpp”中实现了这些函数,那么如果我想在“c.cpp”中使用“a.h”中声明的这些在“b.cpp”中实现的函数,通常都是在“c.cpp”中使用#include “a.h”,那么c.cpp是怎样找到b.cpp中的实现呢?
谭浩强老师的《C程序设计》一书中提到,编译器预处理时,要对#include命令进行“文件包含处理”:将file2.c的全部内容复制到#include “file2.c”处。这也正说明了,为什么很多编译器并不care到底这个文件的后缀名是什么----因为#include预处理就是完成了一个“复制并插入代码”的工作。
编译的时候,并不会去找b.cpp文件中的函数实现,只有在link的时候才进行这个工作。这时如果我们明明的"b.cpp"如果与"a.h"同名的话,可以直接link上,即a与b名字相同,要不然就需要在b.cpp中# include a.h 就可以实现

// swap.cpp
# include <iostream>
// # include "swap.h"using namespace std;void swaps(int a, int b) {int temp;temp = b;b = a;a = temp;cout << a <<" "<<  b << endl;
}

3、创建一个包含main的源文件,源文件里面包含函数的调用

# include<头文件> 编译器只会从系统配置的库环境中寻找头文件,不会搜索当前文件夹,通常用于引用标准库头文件
# include"头文件" 编译器会从当前文件夹中寻找头文件,如果找不到则到系统默认库环境中寻找,一般用于引用用户自己定义使用的头文件。

// main.cpp
# include <iostream>
# include "swap.h"using namespace std;int main() {swaps(10, 20);return 0;
}

c++ 头文件的创建和使用,头文件与源文件的命名关系,#include <头文件> 和 #include “头文件“的关系相关推荐

  1. 关于DBC文件的创建

    版权声明:本文为CSDN博主「第55号小白鸭」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/weixin ...

  2. lgo怎么打开o文件_GO语言文件的创建与打开实例分析

    本文实例分析了GO语言文件的创建与打开用法.分享给大家供大家参考.具体分析如下: 文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的.Golang 对文件的支持是在 os pack ...

  3. python 修改文件创建时间_python 两种方法修改文件的创建时间、修改时间、访问时间...

    突如其来想知道一下 python 如何修改文件的属性(创建.修改.访问时间),于是就去网上搜集了可行方案,也就有了这篇博客 方案一 from win32file import CreateFile, ...

  4. Git获取远程分支文件并创建自己的远程分支

    Git获取远程分支文件并创建自己的远程分支 1.前期准备软件:git-bash 2.获取远程分支文件过程 创建一个空的文件夹,选择文件夹,并右击,选择该选项打开命令行. 复制需要拉取的远程仓库地址. ...

  5. 准确获取linux文件的创建时间

    1. windows 与 linux 的文件创建时间 在windows系统上,一个文件有3个时间属性,他们分别是 创建时间 修改时间 访问时间 linux上的文件也有三个时间属性,分别是 访问时间(a ...

  6. linux 复制并创建文件夹,Linux_文件及文件夹[创建][复制][移动][删除][重命名]

    一.文件/文件夹创建 1.文件的创建 touch , vi/vim/nano , ... 语   法: touch [-acfm][-d ][-r ][-t ] [--help] [--version ...

  7. /usr/include/c++/7/bits中头文件被破坏/环境破坏

    今天因为修改了bits中的头文件,导致catkin_make一直失败,一直有各种各样奇奇怪怪的错误 报错1: 报错2: 解决方法:在另一台ubuntu系统下找到相同的文件 cp过来 我的是unique ...

  8. VS2013动态库文件的创建及其使用详解

    一.VS2013动态库文件的创建 1.新建项目,win32,win32项目,输入项目名称,例如MakeDll. 2."确定"--"下一步",选择"DL ...

  9. 【转】VS2013动态库文件的创建及其使用详解

    一.VS2013动态库文件的创建 1.新建项目,win32,win32项目,输入项目名称,例如MakeDll. 2."确定"--"下一步",选择"DL ...

最新文章

  1. 禁用outlook2007 垃圾邮件过滤功能
  2. 分布式缓存系统Memcached简介与实践(.NET memcached client library)
  3. 《JavaScript入门经典》学习笔记1
  4. Linux下ps -ef和ps aux的区别
  5. Windows10 家庭版——开启Hyper-V虚拟机
  6. php用switch编写车费的输出,PHP Switch语句在实际代码中的应用
  7. 为什么toString方法可以用来区分数组和对象?
  8. sqlserver mysql时间格式化_SqlServer时间格式化
  9. kafka 如何做到1秒发布百万级条消息?
  10. php 统计二维数组次数最多_前端面试题(数组篇)
  11. lamp软件包安装(rpm)
  12. Android用canvas画哆啦A梦
  13. oh my Zsh使用手册
  14. MySQL学习(二、简单查询和多行、单行函数)
  15. 利用SusuCMS快速创建网站(一)
  16. 【Linux学习笔记】Linux-CentOS下安装Redis
  17. Mozilla Apache/Nginx/Lighttpd/HAProxy SSL 配置生成器
  18. hp服务器系统检测,HP服务器检测步骤
  19. 绘画能力基础资料整理
  20. excel如何冻结表格行或者列

热门文章

  1. 《刻意练习》:以学习编程为例
  2. 201111621401-白乐乐-思维导图
  3. 【日记】Eratosthenes Sieve
  4. 服务器操作系统镜像,镜像服务器操作系统
  5. AutoCAD学习笔记——基本操作1
  6. 爬取拉勾网招聘信息(招聘岗位,公司名称,薪资等)
  7. 宾夕法尼亚大学2020最新-《图神经网络》
  8. 中断响应时间/中断步骤/中断源
  9. sql语句时间范围查询(包含开始时间和结束时间)
  10. 物体红外发射率/辐射率测量