多个C语言代码文件编译示例

2023-11-18

多个C语言代码文件编译示例

多个C语言文件的编译在实际项目中会遇到,是模块化编程的重要体现,是必须要学习的。我们先学习一个简单的例子。

我们要实现一个加法和减法操作,将加法和减法看成两个独立的功能,头文件和源文件是分离的,方便给其他开发人员使用。这里需要注意的是,在源文件中提供的可以被外部调用的函数,最好在头文件中声明,避免使用extern关键字。

(1)add.h

#ifndef ADD_H
#define ADD_H

int add(int, int);

#endif

(2)sub.h

#ifndef ADD_H
#define ADD_H

int sub(int, int);

#endif

(3)add.c

#include "add.h"

int add(int a, int b)
{
    return a+b;
}

(4)sub.c

#include "sub.h"

int sub(int a, int b)
{
    return a-b;
}

(5)main.c

#include "add.h"
#include "sub.h"

int main()
{
    int a = 3;
    int b = 4;
    printf("a=%d,b=%d,a+b=%d,a-b=%d\n", a, b, add(a, b), sub(a, b));
    return 0;
}

因为所有头文件都在当前目录,所以不需要指定,直接编译如下:

gcc -o test add.c sub.c main.c

写一个Makefile文件如下:

objects = add.o sub.o main.o
all:$(objects)
    $(CC) -o test $(objects)
$(objects): %.o : %.c
    $(CC) -c $(CFLAGS) $< -o $@
.PHONY:clean
clean:
    rm -rf *.o

编译命令:

make all

清空编译中间文件:

make clean

Makefile文件的好处是:项目文件很多的时候很方便。

再复杂的Makefile文件也是从简单文件开始构建的,不要害怕,继续学,继续用。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个C语言代码文件编译示例 的相关文章

  • 基于java的物资管理系统设计与实现

    基于java的物资管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的物资管理系统设计与实现的研究背景和动机在于提高物资管理系统的效率和质量 使得物资管理系统更加便捷 快速 准确 从而提高物资管理的水平 该系统的设计和实现主要围
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 【计算机毕业设计】电商个性化推荐系统

    伴随着我国社会的发展 人民生活质量日益提高 于是对电商个性化推荐进行规范而严格是十分有必要的 所以许许多多的信息管理系统应运而生 此时单靠人力应对这些事务就显得有些力不从心了 所以本论文将设计一套电商个性化推荐系统 帮助商家进行商品信息 在
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 【卡尔曼滤波】具有梯度流的一类系统的扩散映射卡尔曼滤波器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章
  • 华为OD统一考试 Python【数字转化】

    描述 我们想要一种特殊的整数编码方式 让数字小的时候 编码占的空间也小 编码的方法如下 我们每7位组成一部分来编码 在每个字节里 用前7位来存数字 如果后面还有数据 最高的那一位就是1 否则就是0 数据要按小端序保存 也就是说 小的数据部分
  • Android Navigation的四大要点你都知道吗?

    在JetPack中有一个组件是Navigation 顾名思义它是一个页面导航组件 相对于其他的第三方导航 不同的是它是专门为Fragment的页面管理所设计的 它对于单个Activity的App来说非常有用 因为以一个Activity为架构
  • 一台java服务器可以跑多少个线程?

    一台java服务器可以跑多少个线程 一台java服务器能跑多少个线程 这个问题来自一次线上报警如下图 超过了我们的配置阈值 打出jstack文件 通过IBM Thread and Monitor Dump Analyzer for Java
  • 面试官随便问几个问题就知道你究竟做没做过微信支付宝支付

    面试官随便问几个问题就知道你究竟做没做过微信支付宝支付 你知道直连模式和服务商模式吗 网上的课程一般给你演示的都是直连模式 而企业中有不少是申请成为了服务商 因为里面有佣金提成 我粗俗地解释 直连模式 就是说你是一个会做生意的老板 自己会搞
  • (2024最新整理)Java最全八股文及答案!

    Java的特点 Java是一门面向对象的编程语言 面向对象和面向过程的区别参考下一个问题 Java具有平台独立性和移植性 Java有一句口号 Write once run anywhere 一次编写 到处运行 这也是Java的魅力所在 而实
  • 计算机Java项目|尤文图斯足球俱乐部网上商城系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|基于SSM的微课学习系统

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 【自适应滤波】一种接近最佳的自适应滤波器,用于突发系统变化研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 【go语言】读取toml文件

    一 简介 TOML 全称为Tom s Obvious Minimal Language 是一种易读的配置文件格式 旨在成为一个极简的数据序列化语言 TOML的设计原则之一是保持简洁性 易读性 同时提供足够的灵活性以满足各种应用场景 TOML
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 基于节点电价的电网对电动汽车接纳能力评估模型研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 学Python,一个月从小白到大神?看你怎么学!

    Python是一门超强大而且超受欢迎的编程语言 它被用在各种领域 比如网站开发 数据分析 人工智能和机器学习 学会Python会给你创造很多职业机会 所以绝对是值得一试的 但你有没有过这样的梦想 一个月时间 从Python小白变成Pytho
  • 计算机Java项目|有机蔬菜商城

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Java开发中不要使用受检异常

    简介 Java是唯一 主流 实现了受检异常概念的编程语言 一开始 受检异常就是争议的焦点 在当时被视为一种创新概念 Java于1996年推出 如今却被视不良实践 本文要讨论Java中非受检异常和受检异常的动机以及它们优缺点 与大多数关注这个

随机推荐

  • 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

    本文是对 NET Tutorial Deploy a microservice to Azure 的翻译和实践 入门级踩坑实践 k8s 大佬请回避 以免浪费您宝贵的时间 介绍 本文的目的是 通过使用 DockerHub 和 Azure Ku
  • 爬取招聘数据进行数据分析及可视化

    爬取招聘信息 对数据分析行业目前就业形式进行数据分析 大体流程如下 1 通过requests模块获取指定的某招聘信息 2 用pandas进行数据清洗 3 用matplotlib进行数据的可视化 导入需要用到的包 import request
  • python icon生成小工具

    在项目制作的过程中 有可能会出现一张图片需要有不同的大小去适应不同的设备和位置时 手动去一个个制作比较麻烦 本人通过网上学习粗略敲了一段python脚本 可能有考虑不周之处还请指出 文底有下载链接 old file new file new
  • 将代码上传到gitee

    1 新建gitee仓库 直接点击创建即可 2 到idea点击vcs gt Enable 3 项目点击右键 选中下列 4 选中项目右键 复制进去链接 5 项目右键 选中下列的文件 6 提交 push push 7 去gitee刷新文件已经上传
  • 框架的注解

    文章目录 一 mybatis 1 MyBatis的常用注解 2 MyBatis的注解实现复杂映射开发 二 Spring 1 Spring原始注解 2 Spring新注解 3 注解配置 AOP 详解 三 springMVC 1 Request
  • 爬山算法启发

    爬山算法 是一种局部择优的方法 采用启发式方法 是对深度优先探索的一种改进 它利用反馈信息帮助生成解的决策 属于人工智能算法的一种 相关术词解释 1 启发式方法 简化虚拟机和简化行为判断引擎的结合 简单讲就是提前对某项行为进行检测和判断 拥
  • win10系统安装Nginx

    Nginx是一款自由的 开源的 高性能的HTTP服务器和反向代理服务器 同时也提供了IMAP POP3 SMTP服务 Nginx可以进行反向代理 负载均衡 HTTP服务器 动静分离 正向代理等操作 因为最近在公司使用到了Nginx 第一步
  • nginx目录结构和配置文件详解

    nginx目录结构和配置文件详解 0x00 Nginx 目录结构 Nginx 文件结构比较简洁 主要包括配置文件和二进制可执行程序 通过安装包形式安装的 nginx 文件结构跟各 Linux 发行版目录规则存放配置文件和二进制文件的位置 目
  • 3 Minute Thesis (3MT)

    1 定义 资料来源 https zhuanlan zhihu com p 63325983 utm id 0 3MT原则 要把博士课题介绍给一个受过高等教育但没有专业背景的人并阐述它的重要性 定义 三分钟论文 3MT 是一个学术比赛 帮助当
  • k8s问题 CrashLoopBackOff

    我们创建资源发现资源出现CrashLoopBackOff解决 CrashLoopBackOff 告诉我们 Kubernetes 正在尽力启动这个 Pod 但是一个或多个容器已经挂了 或者正被删除 root localhost kubectl
  • R语言09-单变量绘图(频数分布直方图/折线图)

    使用ggplot绘图系统 运用qplot ggplot两种方式进行单变量绘图示例 直方图 qplot 系统默认柱状图 library ggplot2 qplot x dob day data users 传入参数x和数据集 ggplot 与
  • MIPI CSI-2学习

    CSI Camera Serial Interface 定义了摄像头外设与主机控制器之间的接口 旨在确定摄像头与主机控制器在移动应用中的标准 关键词描述 缩写 解释 CCI Camera Control Interface 物理层组件 通常
  • 1-Axure

    Axure学习 一 原型图 1 原型图作用 描述互联网产品设计的文档 项目中 与相关部门沟通需求的工具 研发 设计 敏捷开发中 简化版的需求文档 PRD MRD 2 原型图种类 线框图 制作快速 低成本描述方案 给设计更多空间 高保真原型图
  • 2.4.2QT之comboBox下拉框

    2 4 2QT之comboBox下拉框 文章目录 2 4 2QT之comboBox下拉框 前言 2 4 2 1 QComboBo 常用的成员函数 2 4 2 2QComboBox 常用的槽函数 2 4 2 3QComboBox 常用的信号
  • 批量上传文件到服务器中,如何批量上传文件到云服务器

    如何批量上传文件到云服务器 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 将文件上传至Linux服务器一般会采用WinS
  • JAVA: quakus程序运行

    mvnw compile quarkus dev
  • Select type&partitions (2)—mysql执行计划(四十八)

    前面说了explain的table是表名 显示在前面的代表驱动表 正常select会出现不同的id 但如果子查询本来是两个select 但被优化成连接查询 就会导致是相同的id union查询会出现临时表 id为null 这个临时表作用于去
  • 连杆坐标系的规定

    z0是沿着关节轴1的方向 一般l0的坐标轴与l1的坐标轴相同 故 两个关节轴间的距离为0 角度为0 即初始 a 和 为0 建立连杆坐标系的步骤 1 找出各关节轴 并标出 或画出 这些轴线的延长线 在下面的步骤2至步骤5中 仅考虑两个相邻的轴
  • 【uni-app报错】选择地址:fail the api need to be declared in the requiredPrivateInfos field in app/ext.json

    uni app报错 errMsg chooseAddress fail the api need to be declared in the requiredPrivateInfos field in app json ext json 笔
  • 多个C语言代码文件编译示例

    多个C语言代码文件编译示例 多个C语言文件的编译在实际项目中会遇到 是模块化编程的重要体现 是必须要学习的 我们先学习一个简单的例子 我们要实现一个加法和减法操作 将加法和减法看成两个独立的功能 头文件和源文件是分离的 方便给其他开发人员使