我有两个c程序:program1.c
和program2.c
这两个程序都有三个或更多相同的功能。我如何定义它们一次并在两者中使用它?
一个例子:我有两个程序:simple-calculator.c
和scientific-calculator.c
。
两者都有基本操作(加法,减法,乘法和除法)。我想定义一个thrid文件“basic-operation.c”并为每个操作创建一个函数,然后在这两个脚本中包含这些函数。
答案 0 :(得分:4)
我猜你是在Posix系统上(Linux,MacOSX ......)
我假设您的两个源文件program1.c
和program2.c
对应两个不同的可执行文件program1
和program2
制作包含类型,功能和广告的标题文件myheader.h
变量声明。
创建包含公共函数(和公共变量)定义
的实现文件common.c
在所有#include "myheader.h"
,program1.c
,program2.c
common.c
将common.c
编译为目标文件common.o
:
gcc -Wall -g -c common.c -o common.o
编译program1.c
和program2.c
中的每一个并将其链接到该目标文件common.o
gcc -Wall -g program1.c common.o -o program1
gcc -Wall -g program2.c common.o -o program2
稍后,学习如何制作程序库-e.g.静态库libcommon.a
或共享库libcommon.so
- (阅读this howto)并使用make
之类的构建器(请参阅this documentation,以及this example })。您的图书馆可能包含多个成员common_a.o
和common_b.o
....
答案 1 :(得分:2)
每当我不止一次使用某个函数时,我会考虑将它作为我的一个库的一部分,我在后面的项目中将其包含在内。有些功能没有成绩,大多数功能需要重写才能使它们更具通用性和可重用性。但是值得一点点额外的工作。
警告:在程序世界中长大,我仍然在使用程序库代码,有一天我会将其正确地重构为对象等,是的。翻译:拖延太多的库太长时间往往会让你将遗留代码用于当前的项目,除非你比我更聪明,更有纪律。然而,这并不是一个糟糕的开始。编写可重用代码并构建“一次编写,经常使用”代码的存储库是我衷心推荐的一种做法。
答案 2 :(得分:1)
Here是一个很好的描述。基本上,您编写包含公共代码的第三个文件,并将其编译到库中;您将这些函数的签名提取到头文件中;您#include
两个程序文件中的标题;在链接过程中,您将新程序与已编译的库链接。