分文件编程 动态库和静态库

分文件编程 动态库和静态库

一、分文件编程

好处:

分模块的编程思想

1.功能责任划分明确

2.方便调试

3.主程序简洁

例子:下面有一个程序:calculatorT.c

#include<stdio.h>

int add(int x,int y)
{
   return x+y;
}

int min(int x,int y)
{
   return x-y;
}

int mul(int x,int y)
{
   return x*y;
}

float dev(int x,int y)
{
   return (float)x/y;
}

int main()
{
    int data1=0;
    int data2=0;
    int ret=0;
    float retfloat=0;

    printf("请输入加数1\n");
    scanf("%d",&data1);
    printf("请输入加数2\n");
    scanf("%d",&data2);

    ret=add(data1,data2);
    printf("%d+%d=%d\n",data1,data2,ret);

    ret=min(data1,data2);
    printf("%d-%d=%d\n",data1,data2,ret); 

    ret=mul(data1,data2);
    printf("%d*%d=%d\n",data1,data2,ret);

    retfloat=dev(data1,data2);
    printf("%d/%d=%.2f\n",data1,data2,retfloat);

    return 0;
}

用分文件编程重构,如下

主程序:calculatorT.c

#include<stdio.h>
#include"calcufuns.h"

int main()
{ 
    int data1=0;
    int data2=0;
    int ret=0;
    float retfloat=0;

    printf("请输入加数1\n");
    scanf("%d",&data1);
    printf("请输入加数2\n");
    scanf("%d",&data2);

    ret=add(data1,data2);
    printf("%d+%d=%d\n",data1,data2,ret);

    ret=min(data1,data2);
    printf("%d-%d=%d\n",data1,data2,ret); 

    ret=mul(data1,data2);
    printf("%d*%d=%d\n",data1,data2,ret);

    retfloat=dev(data1,data2);
    printf("%d/%d=%.2f\n",data1,data2,retfloat);

    return 0;
}

把功能函数放在另一个文件:calcufuns.c

int add(int x,int y)
{
   return x+y;
}

int min(int x,int y)
{
   return x-y;
}

int mul(int x,int y)
{
   return x*y;
}

float dev(int x,int y)
{
   return (float)x/y;
}

给功能函数再做一个h文件放在主程序里,防止编译报错

calcufuns.h

扫描二维码关注公众号,回复: 16977628 查看本文章
int add(int x,int y);
int min(int x,int y);
int mul(int x,int y);
float dev(int x,int y);

以上就完成了分文件编程,

二、动态库与静态库

2.1动态库

1.动态库:是在程序执行时动态(临时)有目标程序调用

​ 缺点:运行慢

​ 优点:程序小

动态库的命名规则:前缀为lib,后缀为.so

2.动态库的制作:

生成.o,加一个fpic

gcc -shared -fpic calcufuncs.c -o libcalc.so

-shared 指定生成动态库
-fpic   标准
  1. 动态库的使用:
gcc calculatorT.c -lcalc   -L ./ -o mianProDy

如果这个时候编译出错,采用下面的解决方法

1.临时有效

sudo cp libcalc.so  /usr/lib/
拷到默认路径                

2.永久有效

export: 列出系统中的环境变量
pwd:列出当前的路径
export LD_LIBRARY-PATH="/home/pi/back/test";
(带动态库的程序可以指定该程序运行的时候,在LD_LIBRARY_PATH所指定的路径去找库文件)

du指令:计算文件大小

2.2静态库

1.静态库:在程序(编译)执行前就加入到目标程序去

​ 缺点:程序大 优点:运行快

2.静态库的制作

格式:xxx.a(以a结尾)
a:gcc calcufuncs.c  -c 生成.o文件
b:rcs libcalcufunc.a  calcufuncs.o (xxx.o文件生成xxx.a文件)

3.静态库的使用

保留静态库和.h文件

编译时:

gcc calculatorT.c -lcalcufunc

如果编译出错,优先从标准库找

所以改为

gcc calculatorT.c -lcalcufunc -L ./
(优先从当前目录找,找不到再到标准库找)

猜你喜欢

转载自blog.csdn.net/qq_47944751/article/details/131603194
今日推荐