extern Depolama Sınıfı Tanımlayıcısı
Depolama sınıfı tanımlayıcısı extern
ile bildirilen bir değişken, başka bir kaynak dosyada tanımlanan aynı ada sahip bir değişkene başvurudur. Dış düzey değişken tanımını görünür hale getirmek için kullanılır. olarak extern
bildirilen değişkenin kendisi için ayrılmış depolama alanı yoktur; yalnızca bir addır.
Örnek
Bu örnekte, iç ve dış düzeyi bildirimler gösterilmektedir:
// 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);
}
Bu örnekte, değişken i
Source1.c içinde 1 başlangıç değeriyle tanımlanır. Source2.c'deki bir extern
bildirim, 'i' öğesini bu dosyada görünür hale getirir.
işlevinde func
, işaretçi değişkenini başlatmak için genel değişkenin i
static
external_i
adresi kullanılır. Bu, genel değişkenin yaşam süresi olduğundan static
çalışır, yani adresi program yürütme sırasında değişmez. Ardından, bir değişken i
kapsamı func
içinde ilk değeri 16 olan bir yerel değişken olarak tanımlanır. Bu tanım, yerel değişken için adının kullanılmasıyla gizlenen dış düzeyi i
değerini etkilemez. Genel i
değeri artık yalnızca işaretçisi external_i
aracılığıyla erişilebilir.