c++学习总结(第四篇)

1、预处理器的简单介绍

我们知道要使用头文件,必须在源文件中#include该头文件。为了编写头文件,我们需要进一步理解#include指示是怎样工作的。#include是c++预处理器的一部分,预处理器处理程序的源代码,在编译器之前运行。c++继承了c语言的非常精细的预处理器。

#inlcude指示只接受一个参数:头文件名。预处理器用指定的头文件内容替代每个#include。我们自己的头文件存储在文件中,系统的头文件可能用特定于编译器的更搞笑的格式保存。

头文件经常#include其他头文件。头文件定义的尸体经常使用其他头文件的设施。例如定义Sales_item类的头文件必须包含string库,因为Sales_item类含有一个string类型的数据成员,因此必须可以访问string头文件。

一个头文件按可能被多次包含进同一个源文件,例如使用Sales_item头文件的程序也可能使用string库,该程序不会(也不应该)知道Sales_item头文件使用了string库。在这种情况下,string头文件被包含了两次。

2、避免多重包含

在编写头文件之前,我们需要引入一些额外的预处理器设施,预处理器允许我们自定义变量。需要注意的是,预处理器变量的名字在程序中必须是唯一的,任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。为了避免名字冲突,预处理器变量经常用全大写字母表示。

预处理变量有两种状态:已定义或未定义。定义预处理器变量和检测器状态所用的预处理器指示不同。#define指示接收一个名字并定义该名字为预处理器变量;#ifedef(if not define缩写)指示检测指定的预处理器变量是否为定义。如果预处理器变量未定义,那么跟在其后的所有指示都会被处理,直到出现#endif。

可以使用这些设施来预防多次包含同一头文件,

#ifndef SALESITEM_H

#define SALESITEM_H

#endif

如果SALESITEM_H预处理器变量未定义,那么#ifndef为真,跟在#ifndef后面的搜友行都被执行,直到发现#endif。相反,如果SALESITEM_H已经定义,那么#ifndef为假,该指示和#endif指示间的代码都被忽略。

为了保证头文件在给定的源文件中只处理过一次,我们首先检测#ifndef。第一次处理头文件时候,测试会成功,因为SALESITEM_H还未定义。下一条语句定义了SALESITEM_H;如果我们便以的文件恰好又一次包含了该头文件,#ifndef指示会发现SALESITME_H已经定义,并且忽略该头文件的剩余部分。

3、使用自定义的头文件

#include指示接收以下两种形式:

#include <standard_header>

#include "my_file.h"

如果头文件名在尖括号(<>)里,那么认为该头问津啊是标准头文件,编译器将会在预定义的位置集查找该头文件,这些预定义的位置可以通过查找路径环境变量或者中国命令行选项来修改;如果头文件名括在一对引号里,那么认为它是非系统头文件,非系统头文件的查找通常开始于源文件所在的路径。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值