• C语言航路外传之如何隐藏代码及声明和定义的在工程中真正的使用场景


    在之前函数第二幕的时候我们提到过函数的声明和定义,其中有一种方式是这样使用的,如下代码所示

    1. #include
    2. int Add(int x,int y);
    3. int main()
    4. {
    5. int a = 0;
    6. int b = 0;
    7. scanf("%d %d", &a, &b);
    8. int ret = Add(a, b);
    9. printf("%d", ret);
    10. return 0;
    11. }
    12. int Add(int x,int y)
    13. {
    14. return x + y;
    15. }

    这时候,有人就觉得这个也没有什么大用处啊,直接都放在开头不行吗?何必多此一举呢?,其实这种声明定义函数的方式在实际工程中并非这样使用的。在真正的项目中我们是这样使用的

    我们在多放入一个头文件和一个.c文件,add.h和add.c。

     然后我们把加法函数,放在add.c中

     把函数的声明放在add.h中

     这样的话,如果我们想在我们的工程中使用Add这个函数,我们只需要在test.c中#include "add.h"即可,如下图所示

     这样我们试着运行一下,代码仍然正常运行

     上面的这种操作中:

    我们把add.h和add.c称作一个模块,test.c是一个模块

     add.h和add.c为加法模块,test.c为测试模块,也就是test.c就是为了测试一下加法模块

    在加法模块中,我们一般是在头文件中声明函数,.c文件中是实现函数,然后测试模块,只需要引用一下头文件,编译器就会自动将三个文件组合到一块。有点类似于使用库函数,只不过这个库函数是由我们自己制作的。但是要注意,使用c语言提供的库函数,是引用 <>这个括号,而我们自己造的库函数是需要使用 '' "的。

    那么这样写有什么好处呢?

    1.这样写可以是我们的程序模块化

    比如说我们有一个加减乘除的程序,我们利用这种方式可以进行分工,一个人写一个模块即可。这样的话,每个人只需要开发自己的模块就可以,最后我们一调用他们的模块就可以了。我们这样就实现了模块发开发了。

    2.这样写也可以隐藏我们的代码

    我们之前说过,想要调用同一个项目的不同源文件的函数,我们可以使用一个extern声明一下函数就可以,那为什么我们又要搞一个头文件,然后引用呢?,原因是是由头文件可以做到相关代码的隐藏。

    我们举一个例子吧,假如说张三写了一个代码,他想把这个代码卖给一个公司,但是又不能直接给源代码,因为明年没法收费了。那该怎么解决呢?

    假如说这是我们所写的代码

     我们是这样做的

    我们点击这个

     改为静态库

     应用确定后

    我们运行一下程序,得到下列错误信息

     这时候我们就生成了我们的静态库了

    我们在上面提示的路径中找到我们的文件

     这时候我们就可以把这个.lib文件和我们的头文件一块卖出去了,这个是没有人看得懂的,我们用记事本打开看一下

     买家将买到的静态库和头文件放到文件中

    我们直接使用是不行的

     会出现无法解析的外部命令,这时候我们只需要输入一条指令,导入静态库即可

     这样代码就能正常运行了


    总结:

    本次外传主要讲解了定义和声明在工程中的重要作用,以及如何隐藏自己的代码。当然静态库的使用并不是本节课的重点,主要是为了演示定义和声明的重要作用,以后会详细介绍关于静态库的使用的

  • 相关阅读:
    qml保姆级教程二:qml基本数据类型
    Zebec Protocol 成非洲利比亚展会合作伙伴,并将向第三世界国家布局
    你真的了解以用户为中心的理念吗?
    【开源免费】使用Spring Boot和Html实现ChatGPT,1:亿还原,将就看
    SingleStore数据库,离开 HTAP,人工智能是不切实际的
    DevOps-4:Jenkins配置.Net项目模板Job
    msf后渗透之获取登入password、远程控制、调用摄像头
    React之setState
    JavaWeb Tomcat启动、部署、配置、集成IDEA
    Android OpenGL ES 3.0 3D模型介绍以及加载和渲染
  • 原文地址:https://blog.csdn.net/jhdhdhehej/article/details/127714229