您的位置:首页 > 编程语言

高质量编程指南_第1章

2012-06-04 18:33 106 查看
【规则1-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。

一、为什么会出现头文件被重复引用的问题
在一个CPP文件中,可以包含多个头文件,而头文件间又是可以相互引用的,这就导致一个CPP文件中可能间接多次包含某个头文件,如果头文件中 没有防止 多次编译的语句,就会出现头文件被重复定义的编译错误
二、怎么防止 头文件被重复引用

1、使用 ifndef/define/endif 结构产生预处理块
适用条件:在任意编译环境都可以使用
2、使用 #pragma once
适用条件:在微软的开发工具上的使用

三、命名规则
一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线
四、举例
#ifndef方式
#ifndef _TEST_H_
#define _TEST_H_

class Test
{
public:
	Test(void);
	~Test(void);
private:
	int n;
};

#endif

#pragma once方式
#pragma once

class Test
{
public:
	Test(void);
	~Test(void);
	void print();
private:
	int n;
};

五、执行过程
头文件_TEST_H第一次执行时,还没有被define,则满足#ifndef_TEST_H的条件,
则执行它下面的内容 #define_TEST_H 和 Test类的声明;
之后再编译到该头文件时,由于已经定义了_TEST_H了,所以语句#ifndef_TEST_H 不执行,
而执行#endif的语句,这里没有语句,就直接结束了
因此,在某一个cpp文件中,多次包含了#include<Test.h>时,就不会出现头文件被重复定义的编译错误了

注:

1、Test.h文件的组成:

(1)头文件开头处的版权和版本声明。

(2)预处理块。

(3)函数和类结构声明等。
2、Test.cpp文件的组成:

(1)定义文件开头处的版权和版本声明。

(2)对一些头文件的引用。
(3)程序的实现体(包括数据和代码)
3、头文件的作用:
(1) 通过头文件来调用库功能
在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
(2) 头文件能加强类型安全检查
如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: