首先建立一个C语言项目,然后把所以创立的各个C语言文件都放在同一目录下
然后在main函数里面怎么使用其他C语言文件
main函数使用到那几个C语言文件,头文件就要写明引用的C语言文件名对应的.h,(例:exp1.c 对应ecp1.h)如上图
在main函数里面使用其他C语言文件的格式,例如 Exp1() 就是引用的exp1.c语言文件的函数名
ecp1.c 文件对应的ecp1.h怎么写,首先 exp1.c 里面有几个函数
则将这几个函数的函数名对应着写在 ecp1.h 中,形成 ecp1.h 文件
在ecp1.c 中,是 Ecp1() 函数调用剩下的其他函数,如 trans(),water(),grades() 等函数
类似写出 exp2.c,exp2.h 等等
1、简单来说,就是main函数要引用其他C语言文件,首先在头文件写出 #include " "的格式,
即引用的C语言文件对应的 .h 文件,例如:#include "exp1.h",exp1.h 就是 exp1.c 对应的 .h 文件
2、然后在main函数里面怎么调用呢,直接使用引用的C语言文件的函数名,
如:函数名(); 的格式,例如:Exp1(); Exp1()就是 ecp1.c 文件的函数名
3、引用的C语言文件对应的 .h 文件怎么建立,例如exp1.c 对应的 .h 文件 exp1.h,
首先看 exp1.c 里面有几个函数,则将 ecp1.c 文件里面对应的所有函数写到 exp1.h,
例如 exp1.c的 Exp1(); 对应写到 exp1.h 就是 int Exp1();
例子:
global.h //定义一些全局的变量的声明(用extern修饰),枚举,数据结构,结构体
play.h //播放音乐相关的几个函数的声明
play.c //函数的定义
main.c //主函数所在文件
global.h
#ifndef _MUSIC_GLOBAL_H_
#define _MUSIC_GLOBAL_H_
#include <stdio.h>
#include <stdlib.h>
enum PlayStatus{ PLAYING, PAUSED, STOPED };
typedef struct
{
// char* path;
// char* name;
// char* singer;
//char* 需要动态malloc分配内存,太麻烦
char path[100];
char name[50];
char singer[50];
long duration;
enum PlayStatus status;
//这里也可以定义函数指针变量
} SongInfo;
extern SongInfo playingSong;
#endif /* _MUSIC_GLOBAL_H_ */
play.h 注意函数指针参数的使用
#ifndef _PLAY_H_
#define _PLAY_H_
#include "music.h"
/**
* 因为在play函数内部要修改SongInfo的播放状态字段,所以这个地方参数是指针变量
*
* 函数内部修改传入的 普通变量的值 和 指针变量的引用的值 使用一级指针就可以(SongInfo* info)
*
* 但是函数内部想修改指针变量的指向,那么就需要使用二级指针 SongInfo** info)
*/
void play(SongInfo* info); //默认就是extern
void stop(SongInfo* info);//默认就是extern
void next(SongInfo** info); //
#endif
play.c
#include "play.h"
void play(SongInfo* info)
{
info->status = PLAYING;
printf("play2...");
}
void stop(SongInfo* info)
{
info->status = STOPED;
}
main.c
#include "global.h"
#include "play.h"
/*
gcc $(pkg-config gtk+-3.0 --cflags) $(pkg-config gtk+-3.0 --libs) main.c play.c -o gtktest
如何包含其他动态链接库:
如果.h文件和.c文件不在一起,那么需要通过 -I指定头文件路径
so文件通过 “ -L so所在文件夹 -llibxxx.so ” 来指定。
Linux 下的库文件在命名时有一个约定,那就是应该以lib 三个字母开头,由于所有的库文件都遵循了
同样的规范,因此在用-l 选项指定链接的库文件名时可以省去lib 三个字母。
*/
//定义playingSong
//不需要SongInfo* p_info = (SongInfo *)malloc(sizeof(SongInfo)) 在堆上分配
//全局变量让编译器在栈上分配更加安全
//在函数内部还是需要通过malloc分配,否则将在栈上初始化,函数出栈以后内存可能被侵占
SongInfo playingSong;
int main(int argc, char *argv[])
{
//传入指针
play(&playingSong);
}