预处理器(5)使用嵌套文件包含

第四种:

 

//main.cpp
#include<stdio.h>

#include"Pro1.h"

int main()
{
	printf("%d\n",sum(2,4));
	return 0;
}


Pro1.cpp 存放函数的具体实现

#include"Pro1.h"

int sum(int a,int b)
{
	return a+b;

}


Pro1.h 存放函数的声明

//Pro1.h
int sum(int a,int b);

 

这样写的优势就是程序结构更加清晰。函数原型存在头文件中,实现存在于实现文件中,测试文件存放在含有main()函数的文件中。

随着程序功能的完善,代码量越来越大。这种方式的优势也就越会明显。

上面写得是最简单的一种。

 

但是下面这种情况的话,头文件就会被多次包含。

Pro2.h和Pro3.h中都包含Pro1.h

main.c中包含了Pro2.h和Pro3.h,那么main.c中实际就包含了两次Pro1.h。这样虽然不会出错,但包含相同功能的函数,会造成冗杂,尤其是在大型程序里面。

我们可以在预编译阶段,通过条件编译指令来避免这中不足。

具体操作如下:

在Pro1.h

//Pro1.h
#ifndef _PRO1_H				//是否定义了_PRO1_H,如果是则执行下面的代码,否则直接#endif  
//(_PRO1_H只是一个标识符而已,没有其他特殊含义,一般用类似 _头文件的大写_H 表示)
#define _PRO1_H				//定义_PRO1_H

#include<stdio.h>
#define ERROR_MSG  "Wrong!\n"
void Print();

#endif						//结束


这样多重包含的危险就被消除了。

为了最大可能避免多重包含,建议在每个头文件里都要写上条件编译指令。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值