前言:在这之前,我们的编程都是在一个文件中完成,那么现在我们来学习一下什么是分文件编程,且分文件编程的意义什么
一、为什么要分文件编程
(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
这样是分文件保存并退出
光标在那个文件就是先保存那个文件再退出那个文件