《大规模c++程序设计》笔记

头文件卫哨

每个头文件一般会包含卫哨,即下面的定义:

//foo.h

#ifndef FOO_H

#define FOO_H

#endif

另外还有一种卫哨称为包含卫哨,如:

//foo.h

#ifndef FOO_H

#define FOO_H


#ifndef TOOLS_H

#include "tools.h"

#endif


#endif

通过包含卫哨,即使不修改其它代码,也能大大节省编译时间。


物理依赖


在物理依赖中,组件是最小单位,一个组件包含一个.h和.c文件。关系紧密的逻辑组件应当包含在一个组件中。


通过头文件的包含关系,可以推导出整个工程的物理依赖,但有些情况下会导致隐含依赖。

比如在.c文件中使用extern声明外部变量会导致隐式依赖另外一个物理组件,更坏的是,如果原来的函数声明变了,extern声明没有变,会导致错误。所以应该用头文件包含替代这种extern的方式。


在.c文件中,应该把对应的.h文件放在包含的第一位,这样可以发现未声明的依赖,如果客户组件包含一些头文件时发现必须遵守一定顺序,通常有这种问题。

例如:

//foo.c

#include <iostream>

#include "foo.h"

ostream& operator<<(ostream& , foo& );


//test.c

#include "foo.h"

#include <iostream>


这时test.c就有可能编译通不过,如果foo.h没有包含iostream的话,如果在foo.c中把foo.h包含放在第一个,很容易发现这种问题。


依赖是可以传递的。


isA和hasA必然导致物理依赖,use和HoldsA(包含指针或引用)可能导致物理依赖。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值