在一个项目下的多个c文件可以关联使用比如:
- main.c文件:
#include<stdio.h>
int max(a,b);
int main()
{
int a=5;
int b=6;
printf("%d\n",max(a,b);
}
- max.c文件:
double max(double a,double b)
{
return a+b;
}
在运行时两个文件都不会编译错误,但会运行错误,因为其变量类型声明是不同的。
解决问题的方法是把max函数原型放到头文件(.h)中,在需要max是去引用他:
- max.h文件:
int max(int a,int b);
并在main.c及,max.c中引用max.h:
#include "max.h"
再次运行,编译器可以发现max.c中的类型错误,编译器能知道max的原型是什么。max.h内的代码插入到include行进行编译。
- 自己写的头文件以双引号include,编译时会先从当前目录找该头文件,然后从系统找,尖括号直接从系统找
其实stiod.h等头文件中并没有函数的源代码,而只有该函数的原型。
- 好的编程习惯是,把除了main.c的.c文件都写一个对应的.h声明其原型,全局变量的声明也写入.h,可以在多个.c文件间共享,比如:
//max.c文件下
int gAll=12;
...
//max.h文件下
extern int gAll;
//main.c下
int main()
{
a=1;
max(a,gAll);
return 0;
}
- 如果在函数前加static,那么该函数只能在这个.c文件中使用
- 定义和声明不同,声明无具体代码内容(比如宏声明,函数原型,结构声明等),而定义(函数定义,变量)有。
- 只有声明可以放在头文件中
- 同一编译单元不要有同名声明,为了避免头文件重复定义,则一般写作标准头文件格式:
#ifndef _MAX_H_
#define _MAX_H_
double max(double a, double b);
extern in gAll
#endif