extern 存储类说明符
使用 extern
存储类说明符声明的变量是对另一个源文件中定义的同名变量的引用。 它用于显示外部级别变量定义。 声明为 extern
的变量没有为自己分配存储;它只是名称。
示例
此示例阐释内部和外部级别的声明:
// Source1.c
int i = 1;
// Source2. c
#include <stdio.h>
// Refers to the i that is defined in Source1.c:
extern int i;
void func(void);
int main()
{
// Prints 1:
printf_s("%d\n", i);
func();
return;
}
void func(void)
{
// Address of global i assigned to pointer variable:
static int *external_i = &i;
// This definition of i hides the global i in Source.c:
int i = 16;
// Prints 16, 1:
printf_s("%d\n%d\n", i, *external_i);
}
在此示例中,变量 i
是在 Source1.c 中定义,初始值为 1。 Source2.c 中的 extern
声明让“i”在此文件中可见。
在 func
函数中,全局变量 i
的地址用于初始化 static
指针变量 external_i
。 此用法之所以有效是因为,全局变量有 static
生存期;也就是说,它的地址在程序执行期间不会改变。 接下来,变量 i
在 func
的范围内定义为初始值为 16 的局部变量。 此定义不会影响外部级别 i
的值(通过对局部变量使用它的名称来隐藏它)。 全局 i
的值现在只能通过指针 external_i
访问。
请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈