1.学会编写自己的头文件

有多个文件组成的程序需要一种方法连接名字的使用和声明,在C++中就是通过头文件实现的。C++程序使用头文件包含的不仅仅是类定义。
为了允许把程序写成独立的逻辑块,C++支持所谓的分别编译。正阳程序可以由多个文件组成。
头文件为相关声明提供了一个集中存放的位置。头文件一般包含类的定义、extern变量的声明和函数的声明。使用或定义这些实体的文件要包含适当的头文件。头文件的正确使用可以带来两个好处:保证所有文件使用给定实体的同一声明;当声明需要修改时,只有头文件需要更新。

2. 预处理器的简单介绍

要使用头文件,必须在源文件中#include该头文件。很有必要了解#include指示是怎样工作的。#include设施是C++预处理器的一部分。预处理器处理程序的源代码,在编译器之前运行。C++继承了C的非常精细的预处理器。
#include指示只接受一个参数:头文件名。预处理器用指定的头文件的内容代替每个#include。我们自己的头文件存储在文件中,系统的头文件可能特定与编译器的更高效的格式保存。无论头文件以什么样的格式保存,一般都含有支持分别编译所需的类定义及变量和函数的声明。
采用多文件设计程序,我们很难避免多重包含头文件的问题,C++给出了一个良好的解决方案。

3. 如何避免头文件的多重包含

在编写头文件之前,我们需要引入一些额外的预处理器设施。预处理器允许我们自定义变量。(预处理器变量的名字在程序中必须是为唯一的。任何与预处理器变量相匹配的名字的使用都关联到该处理器变量)。
为了避免名字冲突,预处理器变量通常全大写字母表示。
预处理器有两种状态:已定义或未定义。定义预处理器变量和检测其状态所用的预处理器指示不同。#define指示接受一个名字并定义改名字为预处理器变量。#ifndef指示检测指定的预处理器变量是否未定义。如果预处理器变量未定义,那么 跟在其后的的所有指示都被处理,直到出现#endif。那么,我们就可以使用这些设施来预防多次包含同一头文件:
#ifndef SALESITEM_H
#define SALESITEM_H
// defination of Sales_item class and related functions goes here
#endif

4.区分标准头文件和自己定义的头文件

#include 指示接受两种形式:

#include<standard_header>
#include "my_file.h"

j尖括号里面的头文件是标准头文件。编译器将会在预定义的位置集查找该头文件。引号内的头文件,并不是系统的头文件,而是用户自己编写的头文件。非系统头文件的查找通常开始于源文件所在的路径。

C++Primer::头文件设计基本原则 与 预处理器介绍相关推荐

  1. c语言lcm函数的头文件,LCM中C++的API介绍

    LCM支持多种语言,也有很多版本,这里只介绍C++的几个类以及方法. 类型简介 C++的API,LC提供了三个类以及两个结构体来封装LCM,他们分别是: class lcm::LCM struct l ...

  2. 【《C Primer Plus》读书笔记】第16章:C预处理器和C库

    [<C Primer Plus>读书笔记]第16章:C预处理器和C库 16.1 翻译程序的第一步 16.2 明示常量:#define 16.2.1 记号 16.2.2 重定义常量 16.3 ...

  3. 《C Primer Plus》第十六章——C预处理器和C库

    文章目录 C预处理器和C库 本章内容 翻译程序的第一步 明示常量:#define 记号 重定义常量 在#define中使用参数 用宏参数创建字符串:#运算符 预处理器黏合剂:##运算符 变参宏:... ...

  4. C++头文件重复包含问题分析及解决方案

    一.头文件重复包含问题分析 1) 问题重现 举例说明.假设在某个C++ 头文件 或 源文件 中,包含了A.h和B.h两个头文件: #include "A.h" #include & ...

  5. C语言头文件路径剖析

    在一个软件项目中,如果需要在一个文件中包含另一个头文件时,一般有两种包含方式: #include <stdio.h>#include "module.h" 如果你引用的 ...

  6. 预编译头文件(precompiled header)说明

    今天在改一个很大的程序,慢慢看,慢慢改.突然发现一个.c文件,里面什么也没有,就几个头文件,我一看,这不是把简单的问题搞复杂了吗,随手删掉那个c文件.结果不能编译了: fatal error C108 ...

  7. fatal error C1083: 无法打开预编译头文件 的解决方法

    在VS中移植工程,尤其是含有StdAfx.h和StdAfx.cpp这两个文件的工程,重新编译时常发生"fatal error C1083: 无法打开预编译头文件"的错误.如何解决呢 ...

  8. C语言头文件 “ 细节 ”

    很多事不深入以为自己懂了,但真正用到项目上,才发现了问题.曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的.(毕竟刚毕业时老大对我最初的训练就是 ...

  9. C语言中头文件包含的处理原则

    很多事不深入以为自己懂了,但真正用到项目上,才发现了问题.曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的.(毕竟刚毕业时老大对我最初的训练就是 ...

最新文章

  1. 未来计算机能帮人们做什么,未来的计算机阅读答案
  2. 元宇宙教不会区块链赚钱
  3. 8086汇编 贪吃蛇 源代码
  4. android 内存分析 郭霖_android 内存泄漏(OOM)问题总结
  5. 前端JavaScript 常见的报错及异常捕获与处理方法
  6. org manual翻译--3.6 Org-Plot
  7. 登录plsql 报错 the account is locked --用户被锁
  8. 天融信荣获《中国信息安全》2018年度“双推”活动两项荣誉
  9. unity内置shader
  10. vue把jade转换为html,vue 使用Jade模板写html,stylus写css的方法
  11. (原创)[短小精悍系列]为什么蓝色光比红色光看起来更刺眼?而日常生活中反而说绿色和蓝色更柔和?
  12. EditText 去掉下划线,但是不丢失光标
  13. E430 加装固态硬盘(SSD)参考
  14. 没有对公账户怎么开通认证微信公众号?
  15. ELK环境部署(一)--基础环境配置
  16. python入门教程 傻瓜_python傻瓜教程
  17. 99物联金手指模组AFW127PI
  18. CUDA快速傅里叶变换 cuFFT
  19. (ICLR-2019)DARTS:可微分架构搜索
  20. vue使用高德api 定位获取位置信息 positionLocation.js及 USERKEY_PLAT_NOMATCH报错

热门文章

  1. Netiler annotation 用法
  2. 31天重构学习笔记3. 提升方法
  3. 陈灯可重用代码段管理器(插件版最新版本:3.2;桌面版最新版本:2.3)
  4. hdu 5247(RMQ+枚举)
  5. CSS之box-shadow
  6. java中的Calendar
  7. WPF中的Bitmap与byte
  8. Pycharm中Python3连接Oracle
  9. Python time strptime()方法 时间操作
  10. 如何用命令行刷新,启用,禁用Magento2的缓存