第四种:
//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 //结束
这样多重包含的危险就被消除了。
为了最大可能避免多重包含,建议在每个头文件里都要写上条件编译指令。