树莓派之linux库的分文件编程

前言:在这之前,我们的编程都是在一个文件中完成,那么现在我们来学习一下什么是分文件编程,且分文件编程的意义什么

一、为什么要分文件编程
(1)分模块的编程思想
(2)功能责任划分清晰
(3)方便调试
(4)主程序简洁

二、分文件编程实例
通过一个计算器来理解分文件编程的思想

方式一:
(1)calculator.c

#include<stdlib.h>
#include<stdio.h>
#include "calculatorfun.h"

int main(){
    
    

        char suanfa;
        int a;
        int b;
        int mark = 0;
        int cnt = 0;

        printf("Please input the a\n");
        scanf("%d",&a);
        printf("Please input the b\n");
        scanf("%d",&b);
        printf("Please choose the suanfa\n");
        getchar();
        scanf("%c",&suanfa);

        tips(suanfa);

        while(1){
    
    
                cnt++;
                xuansuanfa(a,b,suanfa);

                if(cnt=5){
    
    
                        break;
                }
        }

        return 0;

}

(2)calculatorfun.c

#include<stdlib.h>
#include<stdio.h>

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

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

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

float chufa(int x, int y){
    
    
        int z;
        z = (float)x/y;
        return z;
}

void tips(char suanfa){
    
    

        switch(suanfa){
    
    

                case'+':
                        printf("you input +\n");
                        break;
                case'-':
                        printf("you input -\n");
                        break;

                case'*':
                        printf("you input *\n");
                        break;

                case'/':
                        printf("you input /\n");
                        break;

                default:
                        printf("sorry,you input errror\n");
                        break;
        }
}

void xuansuanfa(int a,int b,char suanfa){
    
    

        switch(suanfa){
    
    

                case'+':
                        printf("The sum of the two data is %d\n",add(a,b));
                        break;

                case'-':
                        printf("The min of the two data is %d\n",min(a,b));
                        break;
                        
                case'*':
                        printf("The mul of the two data is %d\n",mul(a,b));
                        break;

                case'/':
                        printf("The chufa of the two data is %f\n",chufa(a,b));
                        break;
        }
}

(3)calculatorfun.h这个文件主要是进行函数的声明

int add(int x,int y);
int min(int x,int y);
int mul(int x, int y);
float chufa(int x, int y);
void tips(char suanfa);
void xuansuanfa(int a,int b,char suanfa);

运行结果:

CLC@Embed_Learn:~/test$ gcc calculator.c calculatorfun.c 
CLC@Embed_Learn:~/test$ 
CLC@Embed_Learn:~/test$ ./a.out
Please input the a
12
Please input the b
13
Please choose the suanfa
+
you input +
The sum of the two data is 25
CLC@Embed_Learn:~/test$ 

由结果中我们可以看出,在编译的时候是要两个.c文件一起编译从而让这两个文件产生关联的,如果是单独编译一个main函数的文件的话,是不会通过的

方式二:
(1)calculator.c

#include<stdlib.h>
#include<stdio.h>
#include "calculatorfun.h"
#include "calculatorfun.c"

int main(){
    
    

        char suanfa;
        int a;
        int b;
        int mark = 0;
        int cnt = 0;

        printf("Please input the a\n");
        scanf("%d",&a);
        printf("Please input the b\n");
        scanf("%d",&b);
        printf("Please choose the suanfa\n");
        getchar();
        scanf("%c",&suanfa);

        tips(suanfa);

        while(1){
    
    
                cnt++;
                xuansuanfa(a,b,suanfa);

                if(cnt=5){
    
    
                      break;
                }
        }

        return 0;
}

(2)calculatorfun.c

#include<stdlib.h>
#include<stdio.h>

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

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

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

float chufa(int x, int y){
    
    
        int z;
        z = (float)x/y;
        return z;
}

void tips(char suanfa){
    
    

        switch(suanfa){
    
    

                case'+':
                        printf("you input +\n");
                        break;
                        
                case'-':
                        printf("you input -\n");
                        break;

                case'*':
                        printf("you input *\n");
                        break;

                case'/':
                        printf("you input /\n");
                        break;

                default:
                        printf("sorry,you input errror\n");
                        break;
        }
}

void xuansuanfa(int a,int b,char suanfa){
    
    

        switch(suanfa){
    
    

                case'+':
                        printf("The sum of the two data is %d\n",add(a,b));
                        break;

                case'-':
                        printf("The min of the two data is %d\n",min(a,b));
                        break;
                        
                case'*':
                        printf("The mul of the two data is %d\n",mul(a,b));
                        break;

                case'/':
                        printf("The chufa of the two data is %f\n",chufa(a,b));
                        break;

        }
}

(3)calculatorfun.h这个文件主要是进行函数的声明

int add(int x,int y);
int min(int x,int y);
int mul(int x, int y);
float chufa(int x, int y);
void tips(char suanfa);
void xuansuanfa(int a,int b,char suanfa);

运行结果:

CLC@Embed_Learn:~/test$ gcc calculator.c 
CLC@Embed_Learn:~/test$ 
CLC@Embed_Learn:~/test$ 
CLC@Embed_Learn:~/test$ ./a.out
Please input the a
12
Please input the b
12
Please choose the suanfa
+
you input +
The sum of the two data is 24
CLC@Embed_Learn:~/test$ 

从结果中可以看出,这次是直接编译含有main函数的那个文件即可,为什么方式一里要两个文件一起编译,而方式二只要编译一个函数main函数即可呢?

原因:哈哈,我们仔细看一下两个方式中的calculator.c的文件有什么不一样的地方,原来我们发现在方式二的calculator.c 文件的头文件的地方多了一个#include "calculatorfun.c",那么这样的方式也是可以将两个文件关联起来的,所以就有了两种不同的方式。

三、分文件指令
(1)文件多开
vim命令行模式下(即按下esc再按的情况下)输入以下指令

sp 文件名

(2)文件的切换
切换到上方文件:ctrl+w +向上键
切换到下方文件:ctrl+w +向下键

(3)在分文件的情况下保存所有文件并退出
命令行模式下输入:

wqa
这样是保存全部文件并退出
wq
这样是分文件保存并退出
光标在那个文件就是先保存那个文件再退出那个文件

猜你喜欢

转载自blog.csdn.net/weixin_51976284/article/details/125193606