C:将代码拆分放在多个文件的操作

news2024/9/30 17:36:43

目录

前言:

1、多个文件

2、将一个程序分为多个文件的好处

3、一定程度上对代码进行隐藏

结语:


前言:

在我们刚开始学习C语言时,编写的代码通常比较简短,因此将其放在一个文件中并不会带来不便。然而,在实际的软件开发中,代码量可能会非常大,因此一般不会将所有代码都放在一个文件中。为了更好地管理代码,我们通常会根据不同的功能,将代码拆分成多个文件进行管理。

1、多个文件

#include <stdio.h>
int add(int a, int b);//add函数的声明

int main()//主函数
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = add(a, b);
	return 0;
}
int add(int a, int b)//add函数的定义
{
	return a + b;
}

上述,就是将代码都放在一个xu.c源文件里

但是我们知道在企业中,一般情况下是不会这样做的

一般呢,我们会将函数的声明,类型的声明放在头文件(.h)当中,函数的实现放在源文件(.c)当中。

如下展示:
add.h

//add函数的声明
int add(int a, int b);

add.c

//add函数的定义
int add(int a, int b)
{
	return a + b;
}

xu.c (名字是我随便取的,没有特殊含义,不会影响现在说的知识)

#include <stdio.h>
//使用自己定义的add函数,只需要用#include+双引号包含函数名即可
#include "add.h"
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
    //调用函数
	int c = add(a, b);
	printf("%d\n", c);
	return 0;
}

当我们输入10 20 后,检测一下结果:


2、将一个程序分为多个文件的好处

看到这里你可能会觉得像这么一个简单的小程序,为什么要分这么多文件去把它变得复杂呢?

但是,在企业中,通常情况下我们是不会遇到这么简单的程序代码,或许那些项目都要写上万行代码,这时候就需要根据不同的功能,将代码拆分成多个文件进行管理了。

好处一:提高代码的可维护性

当程序规模较大时,所有代码都放在一个文件中会使得代码变得冗长且复杂,难以理解和修改。将其拆分成多个文件,每个文件专注于特定的功能或模块,使得维护和更新代码更加容易。例如,如果一个功能出现问题,只需要关注对应的文件,而不是在整个庞大的代码库中搜索。

好处二:便于团队协作

在团队开发中,不同的成员可以负责不同的文件,并行工作,减少冲突和提高开发效率。每个成员可以专注于自己负责的部分,而不会被其他不相关的代码干扰。

好处三:提高代码的可读性

将一个大的工程按不同功能将代码拆分到多个文件,使得每个文件中代码相对来说较少,因此更容易理解和阅读,并且由于是按代码功能分装,因此它们的功能更加聚焦和明确。这有助于开发者更快地掌握代码的结构和逻辑。

比如说关于一个计算器的程序

我们将计算器分为加、减、乘、除四个模块,分别放在四个文件中

A文件:加

add.c

add.h

B文件:减

sub.c

sub.h

C文件:乘

mul.c

mul.h

D文件:除

div.c

div.h

然后再创建一个存放调用函数的文件E

E文件:

#include"add.h"    

#include"sub.h"    

#include"mul.h"    

#include"div.h"    

像这样分类,就可以把A、B、C、D、E分别给一些人同时进行。大大提高了效率

而且这样分装当哪一模块出现问题时,会更容易检查问题所在。

3、一定程度上对代码进行隐藏

举个例子理解一下:

 假设你正在筹备一场盛大的婚礼。 整个婚礼的筹备工作就像是一个大型的项目,而其中的各项任务就如同代码中的不同功能模块。

你把婚礼的筹备工作分配给了不同的团队,比如有负责场地布置的团队,有负责餐饮安排的团队,还有负责宾客接待的团队。

对于场地布置团队来说,他们知道如何搭建舞台、布置装饰等具体的操作细节(相当于他们了解自己负责的这部分“代码”)。但是他们并不知道餐饮团队是如何选择菜品、安排上菜流程的(相当于隐藏了餐饮安排这部分“代码”)。

同样,餐饮团队也不清楚场地布置团队具体选用了哪些材料、如何搭建结构。

这样的分工就类似于将代码分装在多个文件中。每个团队专注于自己的任务,只了解自己负责的那部分工作的细节,而对其他团队的具体操作细节是不知情的,从而实现了一定程度上的“隐藏”。

通过这种方式,每个团队可以高效地完成自己的工作,而不会被其他部分复杂的细节所干扰。

同时,如果某个部分出现问题,也可以相对独立地进行调整和解决,而不会影响到整个婚礼筹备的其他方面。


结语:

关于将程序分装在多个文件中的介绍就到这里了,后面会出一篇文章关于使用多个文件来完成代码编写的小游戏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1979915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17965 幸运之星(优先做)

这个问题可以通过使用递归或者迭代的方法来解决。我们可以使用一个一维数组dp来存储中间结果&#xff0c;dp[i]表示i个人时的“幸运之星”的初始编号。 以下是使用C的代码实现&#xff1a; #include <iostream> using namespace std;const int MAXN 1000000; int dp[M…

力扣:100379. 新增道路查询后的最短距离 I(Java,BFS)

目录 题目描述&#xff1a;示例 &#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给你一个整数 n 和一个二维整数数组 queries。 有 n 个城市&#xff0c;编号从 0 到 n - 1。初始时&#xff0c;每个城市 i 都有一条单向道路通往城市 i 1&#xff08; 0 < i < …

web高可用群集架构部署----超详细

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【笔记1-6】Qt bug记录:Qt6 无法使用qsort函数排序

在进行Qt5向Qt6升级的过程中&#xff0c;发现Qt6会编译时会出现以下错误&#xff0c;找不到qsort的定义 一开始以为应该是需要头文件或者.pro文件追加一些配置的问题&#xff0c;但是按照下面的提示追加了两个头文件后也没有效果 再进一步调查&#xff0c;找到了下面的文章&a…

python3 pyside6图形库学习笔记及实践(三)

目录 前言菜单栏相关控件使用QtDesigner快速构建菜单栏结构语法 上下文菜单概念为窗体添加上下文菜单为控件添加上下文菜单 折叠菜单资源的加载内置图标Rcc的使用创建资源文件加载资源文件 前言 本系列文章为b站PySide6教程以及官方文档的学习笔记 原视频传送门&#xff1a;【…

【Linux 17】进程信号

文章目录 &#x1f308; 一、信号的概念⭐ 1. 什么是信号⭐ 2. 常见的信号⭐ 3. 信号的管理 &#x1f308; 二、进程的运行⭐ 1. 进程运行模式⭐ 2. 查看后台进程⭐ 3. 运行后台进程⭐ 4. 终止后台进程 &#x1f308; 三、信号的产生⭐ 1. 通过键盘产生信号⭐ 2. 调用系统函数向…

YiYi-Web项目技术栈介绍

项目地址&#xff1a;https://gitee.com/jack0240/yiyi-web YiYi后台管理系统&#xff08;不分离版&#xff09;&#xff0c;SpringBoot Thymeleaf Layui 后台管理系统框架。 前端技术栈 HTML JavaScript JQuery Layui、Bootstrap Echarts图表、大屏展示、富文本 进阶&#…

书生大模型实战营第三期——入门岛

第一关&#xff1a;Linux基础知识 任务如下&#xff1a; 任务描述闯关任务完成SSH连接与端口映射并运行hello_world.py可选任务 1将Linux基础命令在开发机上完成一遍可选任务 2使用 VSCODE 远程连接开发机并创建一个conda环境可选任务 3创建并运行test.sh文件 1. 使用密码进行…

数据结构——单向链表

目录 前言 一、单向链表 二、单向链表基本操作 1、链表单创建 2.节点插入 &#xff08;1&#xff09;尾部插入 &#xff08;2&#xff09;任意位置插入 3、单向链表节点删除 4、链表打印 5、释放链表 6、链表逆序 ...... 三、链表测试 总结 前言 链表&#xff08;Linked List&a…

单细胞Seurat的umi矩阵-与feature、counts(用于质控)

目录 关于umi矩阵学习 用umi计算feature、counts值 ①meta数据查看 ②Count和Feature计算(生成Seurat时自动计算) 1)提取UMI矩阵 2)计算 其他指标 评估质量指标(重点) 1)UMI计数 2)基因计数 3)UMIs vs. genes detected 4)线粒体计数比率 5)综合过滤 过…

【C语言篇】文件操作(下篇)

文章目录 前言文件的顺序读写fscanf和fprintffread和fwrite 文件的随机读写fseekftellrewind 文件读取结束的判定容易被错误使用的feof 文件缓冲区 前言 本篇接上一篇文件操作&#xff08;上篇&#xff09;的内容 文件的顺序读写 在上一篇已经介绍了前面四个了&#xff0c;接…

【人工智能基础四】循环神经网络(RNN)与长短时记忆网络(LSTM)

文章目录 一. RNN1. 循环神经网络结构2. 循环神经网络计算2.1. 机器翻译2.2. 循环体 二. 长短时记忆网路&#xff08;LSTM&#xff09;1. 产生背景2. LSTM的设计思想与LSTM的链式结构2.1. LSTM的设计思想2.2. LSTM链式结构图与遗忘门 3. 长短时记忆网络结构 一. RNN RNN出现的…

五种多目标算法(MOGOA、MOMA、MODA、MOPSO、NSGA2)性能对比(MATLAB代码)

一、算法介绍 MOGOA&#xff1a;多目标蝗虫优化算法 MOMA&#xff1a;多目标蜉蝣算法 MODA&#xff1a;多目标蜻蜓算法 MOPSO&#xff1a;多目标粒子群优化算法 NSGA2&#xff1a;非支配排序遗传算法II 这些算法都是针对多目标优化问题设计的元启发式算法&#xff0c;每种…

Java | Leetcode Java题解之第321题拼接最大数

题目&#xff1a; 题解&#xff1a; class Solution {public int[] maxNumber(int[] nums1, int[] nums2, int k) {int m nums1.length, n nums2.length;int[] maxSubsequence new int[k];int start Math.max(0, k - n), end Math.min(k, m);for (int i start; i < e…

C语言 | Leetcode C语言题解之第321题拼接最大数

题目&#xff1a; 题解&#xff1a; int compare(int* subseq1, int subseq1Size, int index1, int* subseq2, int subseq2Size, int index2) {while (index1 < subseq1Size && index2 < subseq2Size) {int difference subseq1[index1] - subseq2[index2];if (…

Codeforces Round 963 (Div. 2) A~C

封面原图 画师やんよ 掉大分的一场 连夜补题 真的不会写啊真的红温了 A - Question Marks 题意 选择题中答案为ABCD的题目各有n道&#xff0c;小明的答案给你&#xff0c;其中&#xff1f;表示这道题空着没写&#xff0c;问他的最高得分 思路 空着的题目肯定没分 超出选项…

【连续数组】python刷题记录

R3-前缀和专题 绝对要用字典记录 ben神&#xff0c;前缀和字典 class Solution:def findMaxLength(self, nums: List[int]) -> int:#前缀和字典,key为差值&#xff0c;value为坐标dict{0:-1}#当前1和0的差值counter0ret0for i,num in enumerate(nums):#多1&#xff0b;1if…

服务器自动部署网络安装环境

实验环境 rhel7&#xff1a;IP地址为172.25.254.200、主机名为node1.rhel7.org 实验配置 一.kickstart自动安装脚本制作 1.安装图形化生成kickstart自动安装脚本的工具 [rootnode1 ~]# yum install system-config-kickstart 2. 启动图形制作工具 [rootnode1 ~]# system-…

[Meachines] [Easy] shocker CGI-BIN Shell Shock + Perl权限提升

信息收集 IP AddressOpening Ports10.10.10.56TCP:80,2222 $ nmap -p- 10.10.10.56 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-title: Site doesnt have a title (text/html). |_http-server-…

《集成学习实战》:解锁机器学习的智慧合力

《集成学习实战》&#xff1a;解锁机器学习的智慧合力 在机器学习的浩瀚领域中&#xff0c;集成学习以其独特的“集体智慧”理念脱颖而出&#xff0c;成为解决复杂问题、提升模型性能的强大工具。《集成学习实战》一书&#xff0c;正是这样一本引领读者深入探索集成学习奥秘的…