extern
- C kursu
- Orta seviye
- Ders 60/116
- 5 dk
extern ile global değişken paylaşmayı öğrenirsin.
extern anahtar sözcüğü
extern, bir değişkenin başka bir dosyada tanımlandığını bildirir. Header'a extern int counter; yazarsın; kaynak dosyalardan biri int counter = 0; tanımı yapar. Diğer dosyalar header'ı ekleyip counter'ı kullanır.
extern bir bildirimdir, tanım değil; bellek ayırmaz. Birden çok .c dosyası aynı globali paylaşabilir. Tanım yalnızca bir dosyada olmalı; aksi halde bağlayıcı hata verir. Bu mekanizma modüller arası durum paylaşımı için standarttır; config bayrakları, sayaçlar ve hata kodları için kullanılır.
extern ve tanım
Bir global değişkeni paylaşmak için: header'a extern int counter; yaz, bir .c dosyasına int counter = 0; tanımı koy. Tanım dosyası genellikle modülün kendi .c'sidir; örneğin counter.c.
Her .c dosyası #include "counter.h" yaptığında counter'ı görür ve kullanır. Tanımda başlangıç değeri vermek zorunlu değildir ama önerilir; sıfırlanmamış global'ler C'de otomatik sıfır olur ama yine de açık yazmak daha okunurdur. Birden çok tanım bağlayıcı hatasıdır; tek bir tanım ilkesine uy.
Uygulama extern globali kullan
Tek dosyada simüle et: extern int counter; bildirimi yap, sonra int counter = 5; tanımı yap. int main(void) içine counter += 10; ve printf("%d\n", counter); ekle. <stdio.h> başlığını unutma.
Başlangıç kodu
#include <stdio.h>
// extern ile counter bildirimi
// counter'a 5 değeri tanımı
int main(void) {
// counter'ı 10 artır ve yazdır
return 0;
}Örnek çözüm
#include <stdio.h>
extern int counter;
int counter = 5;
int main(void) {
counter += 10;
printf("%d\n", counter);
return 0;
}Beklenen çıktı
15
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 extern bildirimini tamamla
/* config.h */
____ int debug_mode;
/* config.h */
extern int debug_mode;
Açıklama: extern int debug_mode; bildirimi tanımı başka dosyaya bırakır.
2 Birden çok .c dosyası aynı globali paylaşırsa ne olur?
- Hiçbir dosya tanım yapamaz
- Header'da tanım yapılır
- Her dosya tanım yapmalı
- Yalnızca biri tanım yapar Doğru cevap
Açıklama: Tanım tek dosyada, diğerleri extern ile bildirir.
3 extern sözcüklerini eşle
| Kavram | Anlamı |
|---|---|
extern int x; |
Header bildirimi |
int x = 0; |
Kaynak tanımı |
#include "x.h" |
Header ekleme |
linker |
Tanımları birleştiren |