C++ 分离编译 多个文件

本文介绍了一个使用C++进行模块化编程的例子,通过分离不同的功能到独立的文件中,并利用头文件进行函数声明,实现了高效编译。具体演示了如何计算阶乘和两数之和,并展示了从源代码到编译链接全过程。

一个很大程序,往往是若干函数构成。

可每修改一个函数,要把所有的子函数都重新编译一遍太麻烦,据卜胖子说,很可能是太花时间。

于是,将各个子函数分开编译,现在,写一个小例子,记录一下。

有四个文件。

work_fact.cpp
head_all.h
fun_fact.cpp 
fun_add.cpp 

其中,

work_fact.cpp
是主函数。

fun_fact.cpp
是一个函数文件,求一个数的阶乘。

fun_add.cpp
求两个数的和


work_fact.cpp

调用fun_fact.cpp当中的mm_fact函数。j=mm_fact(n1);k=mm_fact(n2);

调用fun_add.cpp当中的mm_add函数。l=mm_add(j,k);


除了work_fact.cpp在文件最一开始声明两个函数。具体的内容,在各自的文件当中。

两个函数文件与work_fact.cpp之间,是通过head_all.h文件来沟通。具体的,是由sh_run.sh实现的。


g++ -c work_fact.cpp
g++ -c fun_fact.cpp
g++ -c fun_add.cpp
g++ work_fact.o fun_fact.o fun_add.o -o main

其中,最后一句是将两个函数连接起来,每次,生成对应的.o文件就好。


work_fact.cpp

# include <iostream>
# include "head_all.h"

using namespace std;

int mm_fact(int);
int mm_add(int ,int );

int main()
{
	int n1=6,n2=4;
	int j = mm_fact(n1);
	int k = mm_fact(n2);

	int l = mm_add(j,k);

	cout << n1 << "! is " << j << endl;
	cout << n2 << "! is " << k << endl;
	cout << "sum of " << n1 << "! and " << n2 << "! is " << l << endl;
	return 0;

}


fun_fact.cpp

# include <iostream>
# include "head_all.h"

int mm_fact (int val)
{
	int ret = 1;
	while(val > 1)
		ret *= val--;
	return ret;
}


fun_add.cpp

# include <iostream>
# include "head_all.h"

int mm_add (int val1, int val2)
{
	int out = 0;
	out = val1 + val2;
	
	return out;
}

head_all.h

int mm_fact(int);
int mm_add(int );

运行sh_run.sh。会有三个*.o文件。

fun_add.o  
fun_fact.o  
work_fact.o


最后,会有一个主程序。main

./main

结果:

6! is 720
4! is 24
sum of 6! and 4! is 744

差不多了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值