第一部分 基本语言 第二章 变量和基本类型(2.9编写自己的头文件)(预处理器)

2.9头文件


头文件为声明提供了一个集中存放的位置,正确使用头文件带来两个好处:

1、保证所有文件使用给定实体的同一声明。

2、当声明需要修改时只用更新头文件。


一、 头文件用于声明而非定义,定义只能出现一次,而声明可以出现多次。有三个例外:

1、头文件可以定义类。

2、可以定义值在编译时就已经知道的const对象。

3、inline内联函数。


二、 定义在头文件中的const对象,当const变量用常量初始化时,const变量就是一个常量表达式,const对象要成为常量表达式,初始化就必须为编译器可见。

为了让多个文件使用相同的常量值,const对象就必须为多文件可见。这样const对象就放到了头文件中。

但是,每个变量只能定义一次,定义分配存储空间,每次对改变量的引用都关联到同一存储空间。因为const对象默认为文件局部变量,所以合法。常量是全局可见性的,所以要在头文件,但是const对象是文件局部变量,只存在于头文件中,别的文件不能访问,所以合法。

反之,const应和其他变量一样,在头文件声明,别的文件定义。





习题解答:

1、判断下列语句那些是声明,哪些是定义,请解释原因。

extern int ix=1024;

int iy;

extern int iz;

extern const int &ri;

答:第一第二是定义,第三第四声明。

2、下列声明和定义那些应该放在头文件中?那些应该放在源文件中?解释原因。

int var;

const double pi=3.14;

externint total=225;

constdouble sq2=squt(2.0);

答:第一第三第四应放在源文件中,第二应放在头文件中。


2.9.2预处理器


include是C++预处理器的一部分,预处理器处理程序源代码在编译器之前运行。include只接受一个参数:头文件名。预处理器用指定头文件的内容替代#include部分。


一、头文件经常需要其他头文件:

头文件在定义的过程中经常要用到其他的头文件,比如各种类。因此就有可能出现同一个头文件被包含多次的情况。所以我们必须保证同一头文件背包含多次而不会引起重复定义。这样我们就要使用预处理器定义头文件保护符。头文件保护符用于避免在已经见到头文件的情况下再次处理头文件。

二、避免多重包含:

预处理器变量的名字在程序中必须是唯一的,因此预处理器变量名经常使用全大写,两个预处理器:

1、#define 接受一个名字,并将定义该名字为预处理器变量。

2、#ifndef 检测指定预处理器变量是否定义。如未定义,则在其后的所有指示都被处理。直至出现#endif。

#ifndef C___primer___Header_h

#define C___primer___Header_h


int b()

{

int q=2,w=3;

return q+w;

}

int a=b();

int q=3;

//int g=a;

//const int b();

extern const int &g;

const int s=5;


#endif


#ifndnf先测试预处理器变量是否被定义,如未定义,定义该变量,并处理接下来的指示。直至#endif。当下一次包含该头文件时,先执行#ifndef,如果定义了,就忽略剩余部分。


二、使用自定义头文件:

文件名在<>中,认为该头文件为标准头文件,文件名在""中,认为是非系统文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值