extern关键字
外部可用(全局变量)extern----全局静态存储区
标准定义格式:extern 类型名 变量名;
如果在所有函数之外定义的变量没有指定其存储类别,那么它就是一个外部变量,它的作用域是从它的定义点到本文件的末尾(在单个源文件中的确是这样,如果有多个源文件,全局变量的作用范围不是从变量定义处到该文件结尾,而是在其他文件中也有效),但是如果要在定义点之前或者其他文件中使用它,那么就需要使用关键字extern对其进行声明(注意不是定义,编译器并不为其分配内存)
建议最优用法
例如a.c文件中定义int a = 5和一个函数,在a.h里写extern int a;
如果要在其他文件里调用a这个变量和函数,直接#include "a.h"
即可。如下图
a.c
#include <stdio.h>
int data = 5;
int func(int a,int b)
{
return a+b;
}
a.h
extern int data;
extern int func();
b.c
#include <stdio.h>
#include "a.h"
int main()
{
printf("b.c data = %d\n",data);
printf("func = %d\n",func(2,3));
return 0;
}
问题:
如果在a.c这个文件中定义了一个全局变量,想要在main函数中使用,该怎么做呢?
①在含有main函数的源文件test.c中加extern声明
a.c
扫描二维码关注公众号,回复:
16848791 查看本文章
#include <stdio.h>
int sum = 100;
int Max(int num1,int num2)
{
int max = num1;
if(num1 < num2){
max = num2;
}
return max;
}
a.h
extern int Max(int num1, int num2);
test.c
#include <stdio.h>
#include "a.h"
int main()
{
int a;
a = Max(10,20);
printf("%d %d",a,sum);
return 0;
}
②在头文件中a.h中对a.c中的全局变量进行声明,再在test.c中include头文件a.h
a.h
extern int Max(int num1, int num2);
extern int sum;