模块化程序设计(多文件编程)介绍

本文介绍模块化程序设计,包括多文件编程方法,如直接编译包含模块功能的C/C++文件和使用共享库。通过示例程序展示了如何在主函数中调用不同文件中的函数,实现模块间的协作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要介绍模块化程序设计(多文件编程)的相关知识,并通过示例程序演示模块化程序设计的方法。

1 概述

模块化程序设计是指在进行程序设计时,将一个大程序按照功能划分为若干小程序模块,每个小程序(即模块)完成一个特定的功能,然后在这些小程序之间建立必要的联系,通过这些小程序的互相协作,实现整个大程序功能的程序设计方法。

这里需要说明的是,模块化程序设计(开发)并非专指多文件编程。模块化程序设计(开发)的重点在于小功能模块的设计和协作。多文件编程只是将(一个或多个)“小程序模块”打包在单独的文件中,以文件的形式进行呈现,形成了多文件编程形式。

本文重点介绍多文件编程的方法。

2 多文件编程的方法

本文介绍两种多文件编程的方法,示例程序架构为:主函数调用“fileA.cpp”中定义的函数funA()和“fileB.cpp”中定义的函数funB()。

此处给出一个简单的示例,相关示例代码如下。

文件“fileA.h”内容如下:

#include <iostream>

using namespace std;

int funA();

文件“fileA.cpp”内容如下:

#include "fileA.h"

int funA()
{
    cout << "This is funA in fileA.cpp print out!" << endl;

    return 0;
}

文件“fileB.h”内容如下:

#include <iostream>

using namespace std;

int funB();

文件“fileB.cpp”内容如下:

#include "fileB.h"

int funB()
{
    cout << "This is funB in fileB.cpp print out!" << endl;

    return 0;
}

文件“main.cpp”内容如下:

#include "fileA.h"
#include "fileB.h"

int main()
{
    // 调用函数funA,函数funA在fileA.cpp中进行定义
    funA();
    // 调用函数funB,函数funA在fileA.cpp中进行定义
    funB();

    return 0;
}

2.1 方法1:直接编译包含模块功能的c/cpp文件

在此方法中,主函数文件与功能模块(函数)文件之间的调用关系如下图所示:

对于示例代码文件进行多文件编程,编译命令如下:

g++ -o main main.cpp fileA.cpp fileB.cpp

运行编译生成的main程序,结果如下:

总结:本方法通过在编译时直接包含cpp文件的形式,将主函数与相关的模块连接在了一起,在主函数中成功调用了函数funA()和函数funB(),实现了模块间的协作。

2.2 方法2:使用共享库

在此方法中,主函数文件与功能模块(函数)文件之间的调用关系如下图:

在使用共享库的场景下,需要先编译生成功能模块的共享库,编译命令如下:

g++ -shared -fPIC -o libfileA.so fileA.cpp
g++ -shared -fPIC -o libfileB.so fileB.cpp

运行上述编译命令后,会生成两个共享库:“libfileA.so”和“libfileB.so”。

在编译过程中,通过关联共享库,建立主函数与相应功能模块的关联关系,编译命令如下:

g++ -o main main.cpp -L . -lfileA -lfileB

说明:“-L”选项指定了共享库的位置;“-l”选项指定了共享库的名字。在运行生成的main程序之前,还需要指定程序运行时需要的共享库的路径(有多种方法可以使用,例如设置环境变量LD_LIBRARY_PATH的值)。

运行编译生成的main程序,结果如下:

总结:本方法通过在编译时连接共享库的形式,将主函数与相关的模块连接在了一起,在程序运行时,再根据设置的共享库的路径(例如设置环境变量LD_LIBRARY_PATH的值),去寻找funA()与funB()的具体定义,最终实现了模块间的协作。

说明:在实际的软件开发过程中,很多情况下都会使用“方法2(共享库)”进行模块化程序开发。使用共享库有如下优点:

  • 共享库的函数在编译的时候并没有被编译到目标代码中,所以编译生成的程序不会太大;
  • 共享库是独立于应用程序存在的,因此,用新版本的共享库替换旧版本的共享库时,工作变得非常简单;
  • 在软件开发过程中,厂商通常只提供头文件(.h)和共享库文件(.so)供开发者使用,这样开发者能够调用头文件中提供的接口,使用相应的功能,但是却看不见对应模块功能的源码信息,最终实现了在提供模块功能的同时又保证了模块封装性的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liitdar

赠人玫瑰,手有余香,君与吾共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值