多文件
C语言通常一个.c配一个.h文件,非主函数。并且配对的.c和.h文件通常是,.h只给配套的.c使用,一般的公共的,会使用common.h这样的名字写一个.h文件。
//.c文件中
//1.定义全局变量
int a = 100;
//2.定义函数
void fun(int a,int b){
return;
}
//.h文件中
//1.结构体、联合、枚举、宏定义(宏函数、宏变量)
struct Node{
int a;
int b;
};
#define NUM 10 + 2
#define MAX(a,b) if(a>b){\
printf("%d",a);\
}else{\
printf("%d",b);\
}
//2.全局变量的声明
extern int a;
//3.函数的声明
void fun(int a,int b);
另外在其他函数中想要使用我们自己写的头文件.h就需要#include “xxx.h”
使用.h文件编译上等同于用所有xxx.h中的所有代码替换#include “xxx.h”。
一般情况下.c文件中会#include配套的.h文件。防止某些不想给外部的函数出现嵌套,并且造成了函数顺序先后问题。(这里说的不是太好,看程序吧。。。我自己知道在说啥。。。就行了)
//stc.c文件中
//1.定义全局变量
int a = 100;
//2.定义函数
//void fun2(int a, int b) { fun2定义在这里是错误的,主函数无法调用fun2,并且stc.h没有声明fun1;
// fun1(1, 2);
//
// return;
//}
void fun1(int a, int b) {
return;
}
void fun2(int a, int b) {
fun1(1, 2);
return;
}
#pragma once
//stc.h文件中
//1.结构体、联合、枚举、宏定义(宏函数、宏变量)
struct Node {
int a;
int b;
};
#define NUM 10 + 2
#define MAX(a,b) if(a>b){\
printf("%d",a);\
}else{\
printf("%d",b);\
}
//2.全局变量的声明
extern int a;
//3.函数的声明
void fun2(int a, int b);
//main函数
#include <stdio.h>
#include "stc.h"
int main() {
fun1(1,2);
return 0;
}
不想给其他人使用的函数,但又要防止在.c函数中函数定义顺序的问题,就在.c文件中的前面使用函数声明就好了,不用放在配对的.h中这样别人就不知道这个函数,就不会引用你的.h文件了。
头文件重复包含问题
a.h包含了b.h,但是主函数需要a.h又需要b.h,那么就重复包含了b.h,包含多了会出现多次重复定义的问题,比如结构体、联合等。。。不要把所有的头文件都包含在一个common的.h中,防止重复包含还能减少编译时间,打包时间。
#pragma once //这也是一个防止多次定义的方法,通常在c++中使用,只编译一次和ifndef的方法一样。。。大概
#ifndef _MOUGEHONG_
#define _MOUGEHONG_
//stc.h文件中
//1.结构体、联合、枚举、宏定义(宏函数、宏变量)
struct Node {
int a;
int b;
};
#define NUM 10 + 2
#define MAX(a,b) if(a>b){\
printf("%d",a);\
}else{\
printf("%d",b);\
}
//2.全局变量的声明
extern int a;
//3.函数的声明
void fun2(int a, int
#endif // !_MOUGEHONG_
要注意,循环包含头文件是禁止的,a.h包含b.h,b.h包含c.h,c.h包含a.h,这样一定要拆开。也不能头文件自己包含自己。
总结
用耳去听,用心去斩,刀斩肉身,心斩灵魂