extern
关键字的作用就是告诉编译器,去别的地方找这个函数或者变量的定义。
1、引用另一个文件中的变量
main.c
#include<stdio.h>
int main()
{
extern int num;
printf("%d",num);
return 0;
}
b.c
#include<stdio.h>
int num = 5;
void func()
{
printf("fun in a.c");
}
2、引用另一个文件中的函数
这里main函数中引用了b.c中的函数func。因为所有的函数都是全局的,所以对函数的extern用法和对全局变量的修饰基本相同,需要注意的就是,需要指明返回值的类型和参数。
main.c
#include<stdio.h>
int main()
{
extern void func();
func();
return 0;
}
b.c
#include<stdio.h>
const int num=5;
void func()
{
printf("fun in a.c");
}
3、与头文件的关系
头文件就是放各种接口定义的地方,不要在头文件中定义任何东西,比如全局变量:
/*xx头文件*/
#ifndef _XX_头文件.H
#define _XX_头文件.H
int A;
#endif
这个头文件如果被多个文件引用,在编译的时候是不会报错的,但是在链接的时候编译器会报错:重复定义全局变量。这个时候就需要加上extern关键字,表示这是一个声明,而不是定义。
总结
extern
关键字的作用就是声明,因为函数是有声明语法的,省略函数体。所以一般函数声明是省略了extern
关键字。
int func(void);
等效于
extern int func(void);
但是变量是没有单独的声明语法,所以要表示变量声明必须加上extern
关键字。
int a; // 这是定义
extern int a; // 这是声明
参考
1、https://blog.csdn.net/xingjiarong/article/details/47656339
2、http://lpy999.blog.163.com/blog/static/117372061201182051413310/