在面对一个大型的代码,需要分文件编写的时候,应该怎么办呢;以及在编写出一个功能时,有人想要买这个功能,怎么在不给出源代码的情况下让买家可以使用这个代码功能呢?

我们一点点来,首先,假设我们要写一个加法功能的实现,

这里是在单个文件里调用函数,实现一个加法的功能,

下面我们把自定义函数放在下面,上面对自定义函数进行一个声明,

下面我们把代码放到多个文件里,

创建两个文件,用来实现加法的功能,

在add.h中放入自定义函数的声明,

add.c中放入自定义函数,

add.h中对自定义函数进行声明,

add.c中放入自定义函数的内容,

这里我们在其他的文件里对编写了一个函数,那么我们想要在主函数调用的话要怎么办呢,

这里我们可以类比一下库函数,库函数是开发人员写好功能后,用户只需要用include调用就可以了,那么想要在main函数里使用我们自定义的add函数的话,只需要在开头加上,#include"add.h",那么我们就相当于调用了自定义函数add,

下面我们来运行一下看看,

我们可以看到,代码是正常运行了的,

那么为什么我们要把一个可以简单的用一个文件写出来的东西给搞复杂呢,

这是因为,我们在以后免不了面对一些大型的工程需要我们的设计,那么如果在一个文件里写,那大概率是要排队的,假设每个模块分两个人来设计,那么谁先设计?这总归会延长工期,效率不高,那么怎么提高效率,怎么让不同的模块一起设计?我们就可以用上面所讲的方法,建立多个文件,这样就可以实现多人同时进行一个大项目的编写,

这里要提一点,add.h内的声明是可以舍弃的,

这里我将add.h中的声明屏蔽后依旧是可以运行的,那么我们为什么还要多此一举,在额外的去建立一个add.h的文件呢,

这就涉及到我们这篇文章所要讲的第二个点了,我们可以通过这个实现代码隐藏,这里假如张三在业余时间做了一个游戏引擎,公司A想要买张三的这个代码,但是张三害怕买了之后,公司把代码改改就跟自己没关系了。那张三说,我可以买这个功能,但是不给你看代码,这个引擎有什么问题,我来维护,我来修。公司A可以写代码来使用我这个功能,那想让人家使用电话,你得告诉人家你的名字,参数,功能等等是什么,怎么使用对吧。那怎么能把代码隐藏起来的同时把这些东西给到买家呢,那这里头文件就有着巨大的作用,如上述例子,我把add.h暴露,里面写上用法,名称,参数,返回值等,把aad.c隐藏起来,那这样就必须要写多个文件了,不能把add函数的声明放在add.c里,从而省略aad.h了。

aad.c怎么隐藏呢,

我们可以把它变成静态库或者动态库,我们假设把它变为静态库,

这里是张三写的一个功能add

包含着两块内容,其中add.c是代码,想要隐藏起来,add.h里是要卖出去,让买家可以看懂的,写着用法,

找到项目名称,右击鼠标,点击属性,

将默认的应用程序改为静态库,然后点击应用,确定,

点击生成,点击生成解决方案,

我们这里生成了一个add.lib文件,这就是一个静态库,我们可以来看一下,在刚刚新建的存放这些文件代码的文件夹里有一个x64,

Debug里就有一个add.lib

我们可以右击鼠标,打开记事本,看一下里面的内容,

里面是一堆乱码,都是我们看不懂的信息,是看不到源码信息的,那么这时候张三就放心的把这个文件卖给了A公司,但是只卖这一个是不行的,还要把头文件一起给A公司,

现在进入公司所写文件中,将add函数导入进去,

右击,点击添加,点击现有项,找到add.h添加,

但是这里并不能使用add.lib这个静态库,我们需要在源.c中导入一下静态库,

现在就可以正常使用了,

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

httprunner4详解

httpruuner官方文档:https://httprunner.com/docs/introduction/overview/ 案例1:使用电商开源项目演示: 项目地址:https://github.com/macrozheng/mall 案例2:使用erp2项目演示: 开源项目:http://erp2.hzb-it.com/ 1.Httprunner环境搭建 HttpRunner v4.0 同时采用…

大数据--hdfs--java编程

环境: virtualbox ubantu1604 Linux idea社区版2023 jdk1.8 hadoop相关依赖 使用java操作 1. 判断/user/stu/input/test.txt文件是否存在,存在则读出文件内容,打印在控制台上。反之,输出“文件不存在”。 package abc;impo…

【JS进阶】第二天

JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用,体会 JavaScript 一切皆对象的语言特征,掌握常见的对象属性和方法的使用。 了解面向对象编程中的一般概念能够基于构造函数创建对象理解 JavaScript 中一切皆对象的语言特征理解引用…

字节跳动面试被拷打:高效处理大量数据的JavaScript技巧

一、文章内容 时间分片宏任务微任务前置内容实现时间分片 二、时间切片 什么是时间切片?通过字面意思我们不难理解时间切片就是将时间分成多个片段进行一一渲染数据,时间切片是个抽象的问题,我们可能会想到JavaScript中window自带的setTimeout的延迟函数或者是 w…

(附源码)基于Spring Boot和Vue的前后端分离考研资料分享平台的设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

操作符详解(C语言)—第三期

逻辑操作符 逻辑操作符有哪些&#xff1a; && 逻辑与 || 逻辑或区分逻辑与和按位与 区分逻辑或和按位或 1&2----->0 1&&2---->1 1|2----->3 1||2---->1逻辑与和或的特点&#xff1a; 360笔试题 #include <stdio.h&…

乐企数字化电子发票(基础版)开票能力测试报告

能力简介&#xff1a;纳税人销售货物或提供服务时&#xff0c;可以通过本能力开具数电票。 纳税人可将本能力中的各类规则和接口嵌入本单位信息化系统中&#xff08;如&#xff1a;销售、 收款、结算等&#xff09;&#xff0c;实现数电票开具流程和商业行为的融合&#xff0c;…

20240317-2-推荐算法FTRL

FTRL FTRL(Follow the Regularized Leader) 由Google的H. Berendan McMahan 等人于2010年提出【4】,FTRL是一种在线最优化求解算法,结合L1-FOBOS和L1-RDA算法,用于解决在线学习中,权重参数不能产生较好的稀疏性的问题。 由于在线学习涉及内容较多&#xff0c;本文从提升模型稀疏…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第三周&#xff1a;浅层神经网络(Shallow neural networks)3.1 神经网络概述&#xff08;Neural Network Overview&#xff09; 第一门课&#xff1a;神经网络和深度学习 (Neural Networks an…

【数据结构与算法】算法复杂度

一、什么是复杂度&#xff1f; 程序执行时需要的计算量和内存空间&#xff0c;其中计算量是指时间复杂度&#xff0c;计算量大则需要时间久&#xff1b;内存空间是指空间复杂度和代码是否简洁无关&#xff0c;而是指计算机的cpu和内存计算复杂程度。 复杂度是数量级&#xff0…

Day43:WEB攻防-PHP应用SQL注入符号拼接请求方法HTTP头JSON编码类

目录 PHP-MYSQL-数据请求类型 PHP-MYSQL-数据请求方法 PHP-MYSQL-数据请求格式 知识点&#xff1a; 1、PHP-MYSQL-SQL注入-数据请求类型 2、PHP-MYSQL-SQL注入-数据请求方法 3、PHP-MYSQL-SQL注入-数据请求格式 PHP-MYSQL-数据请求类型 SQL语句由于在黑盒中是无法预知写法的…

Java代码基础算法练习-求给定范围内所有数之和-2024.03.22

任务描述&#xff1a; 输入两个整数n和 m(0<n<m<20)&#xff0c;求此范围内所有数据之和。(包括n和m) 任务要求&#xff1a; 代码示例&#xff1a; package march0317_0331;import java.util.Scanner;/*** 计算两个整数之间&#xff08;包括这两个整数&#xff09;所…

设计数据库之内部模式:SQL基本操作

Chapter4&#xff1a;设计数据库之内部模式&#xff1a;SQL基本操作 笔记来源&#xff1a; 1.《漫画数据库》—科学出版社 2.SQL | DDL, DQL, DML, DCL and TCL Commands 设计数据库的步骤&#xff1a; 概念模式 概念模式(conceptual schema)是指将现实世界模型化的阶段进而&…

Harbor高可用(nginx和keepalived)

Harbor高可用&#xff08;nginx和keepalived&#xff09; 文章目录 Harbor高可用&#xff08;nginx和keepalived&#xff09;1.Harbor高可用集群部署架构1.1 主机初始化1.1.1 设置网卡名和ip地址1.1.2 设置主机名1.1.3 配置镜像源1.1.4 关闭防火墙1.1.5 禁用SELinux1.1.6 设置时…

postman下载汉化以及使用

【2023全网最牛教程】10分钟快速上手Postman&#xff08;建议收藏&#xff09;_macbook postman打开慢-CSDN博客 Postman 汉化教程&#xff08;小白&#xff09;配置的具体操作_postman怎么设置中文-CSDN博客 上面是两篇参考的博客 postman是一款支持http协议的接口调试与测试…

大模型时代,5个最顶级的向量数据库

介绍5个向量数据库。 大模型时代&#xff0c;向量数据库彻底的火了&#xff0c;今天我分享业内最频繁使用的向量数据库&#xff0c;更多实践经验&#xff0c;可以文末参加我们的技术落地的讨论&#xff0c;喜欢本文记得收藏、关注、点赞。 1 Chroma 使用ChromaDB构建LLM应用程…

地平线 西之绝境完整版下载

版本介绍 v1.0.37.0|容量122GB|官方简体中文|支持键盘.鼠标.手柄|赠多项修改器 与埃洛伊同行&#xff0c;在危险壮美的边疆之地揭开种种未知的神秘威胁。此完整版可完整享受广受好评的《地平线 西之绝境™》内容和额外内容&#xff0c;包括在主线游戏后展开的后续故事“炙炎海…

Uni-app/Vue/Js本地模糊查询,匹配所有字段includes和some方法结合使用e

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.第一步 需要一个数组数据 {"week": "全部","hOutName": null,"weekendPrice": null,"channel": "门市价","hOutId": 98,"cTime": "…

破解城市内涝难题:水文水动力模拟技术的智慧策略,复杂城市排水系统模型的建立

随着计算机的广泛应用和各类模型软件的发展&#xff0c;将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。本次培训将聚焦于综合利用GIS及CAD等工具高效地进行大规模城市排水系统水力模型的建立&#xff0c;利用SWMM实现排水系统水力模拟。讲解…

Jmeter测试计划

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…
最新文章