c语言多文件编程,即main文件调用其他.c文件的方法。
两种方法的区别就是,gcc编译时,是否加b.c文件,不加的话,就在a.c文件里面,加#include "b.c"
至于extern 那一句,是否添加,编译都是可以通过的,只是填加上去,大家都知道了,这个函数在其他地方定义了,这个地方只是调用。
方法1:
a.c
/***************************************************
##filename : a.c
##author : GYZ
##e-mail : 1746902011@qq.com
##create time : 2018-11-13 15:15:25
##last modified : 2018-11-14 14:05:44
##description : NA
***************************************************/
#include "t.h"
#include "b.c"
extern void printB(void);
int main(int argc,char *argv[])
{
printf("%s\n",__FILE__);
printB();
return 0;
}
b.c
/***************************************************
##filename : b.c
##author : GYZ
##e-mail : 1746902011@qq.com
##create time : 2018-11-13 15:19:27
##last modified : 2018-11-14 13:59:39
##description : NA
***************************************************/
#include "t.h"
void printB(void)
{
printf("%s\n",__func__);
}
t.h
#ifndef __T_H__
#define __T_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printB(void);
#endif
编译方法:##gcc a.c
方法2:
a.c
/***************************************************
##filename : a.c
##author : GYZ
##e-mail : 1746902011@qq.com
##create time : 2018-11-13 15:15:25
##last modified : 2018-11-14 14:05:44
##description : NA
***************************************************/
#include "t.h"
//#include "b.c"
extern void printB(void);
int main(int argc,char *argv[])
{
printf("%s\n",__FILE__);
printB();
return 0;
}
b.c
/***************************************************
##filename : b.c
##author : GYZ
##e-mail : 1746902011@qq.com
##create time : 2018-11-13 15:19:27
##last modified : 2018-11-14 13:59:39
##description : NA
***************************************************/
#include "t.h"
void printB(void)
{
printf("%s\n",__func__);
}
t.h
#ifndef __T_H__
#define __T_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printB(void);
#endif
编译方法:##gcc a.c b.c
-------------------------------------------
如果b.c文件里调用c.c文件里的函数,方法也是一样的。
a.c
/***************************************************
##filename : a.c
##author : GYZ
##e-mail : 1746902011@qq.com
##create time : 2018-11-13 15:15:25
##last modified : 2018-11-14 14:27:33
##description : NA
***************************************************/
#include "t.h"
#include "b.c"
extern void printB(void);
int main(int argc,char *argv[])
{
printf("%s\n",__FILE__);
printB();
return 0;
}
b.c
/***************************************************
##filename : b.c
##author : GYZ
##e-mail : 1746902011@qq.com
##create time : 2018-11-13 15:19:27
##last modified : 2018-11-14 14:29:17
##description : NA
***************************************************/
#include "t.h"
#include "c.c"
extern void printC();
void printB(void)
{
printf("%s\n",__func__);
printC();
}
c.c
/***************************************************
##filename : c.c
##author : GYZ
##e-mail : 1746902011@qq.com
##create time : 2018-11-14 14:25:18
##last modified : 2018-11-14 14:26:33
##description : NA
***************************************************/
#include "t.h"
void printC(void)
{
printf("%s\n",__func__);
}
t.h
#ifndef __T_H__
#define __T_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printB(void);
#endif
编译方式,##gcc a.c
--------------------------------------------
关于#ifndef...#define...#endif,就是为了防止这些定义的“东西”大家重复调用,第一个文件使用的时候#include一次就可以了,否则会报错。