extern关键字的用法

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;

猜你喜欢

转载自blog.csdn.net/lijunlin0329/article/details/129008299