08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

Bir projeyi oluşturan farklı kaynak dosyalar birbirinden bağımsız olarak derlendikten<br />

sonra, hepsi birlikte bağlayıcı (linker) ile birleştirilerek tek bir çalıştırılabilir dosyayı<br />

oluştururlar.<br />

Büyük Projelerin Modüllere Ayrılmasının Faydaları<br />

Eğer bütün modüller tek bir kaynak kod içinde birleştirilirse en ufak bir değişiklikte tüm<br />

proje tekrar derlenmek zorundadır. Oysa modüllere ayrılmış projelerde, yalnız değişikliğin<br />

yapıldığı modülün derlenmesi yeterlidir. Çünkü diğer modüller zaten derlenmiştir ve onlar<br />

yalnızca bağlama aşamasında işlem görürler. Programları modüller halinde yazmanın bir<br />

diğer avantajı da grup çalışması yaparken ortaya çıkar. Bu durumda projelerin bağımsız<br />

parçaları (modülleri) ayrı kişiler tarafından hazırlanabilir.<br />

Diğer taraftan modüller de işlevler gibi yeniden kullanılabilen yapılardır. Bir modül birden<br />

fazla projede kullanılabilir.<br />

Bağlantı Kavramı<br />

Projeyi oluşturan kaynak dosyaların birinde tanımlanan bir isme, projeyi oluşturan başka<br />

bir kaynak dosya içinde ulaşılabilir mi? Bu kaynak dosyalar en sonunda tek bir çalışır<br />

dosyayı oluşturacaklarına göre, bazı durumlarda bir modülde tanımlanan bir nesneye<br />

başka bir modülde ulaşmak istenmesi son derece doğaldır.<br />

Bir modülde tanımlanmış bir değişkenin başka bir modülde kullanılıp kullanılmayacağını<br />

gösteren özelliğe o nesnenin bağlantı özelliği (linkage) denir. Bağlantı özelliği bilinirlik<br />

alanından farklıdır. Bilinirlik alanı derleyiciyi ilgilendiren yani derleme zamanına ilişkin bir<br />

kavramdır. Bir nesne bilinirlik alanı dışında kullanılırsa derleme zamanında hata oluşur.<br />

Ancak bağlantı, bağlayıcı programı ilgilendiren yani bağlama zamanına ilişkin bir<br />

kavramdır. Bir nesne, bağlantısının olmadığı bir modülde kullanılırsa bağlama zamanında<br />

hata oluşur.<br />

C standartlarına göre nesneler bağlantı özellikleri açısından 3 ana gruba ayrılır.<br />

1. Dış bağlantıya sahip nesneler (external linkage)<br />

Eğer bir nesne tanımlandıktan sonra, bu nesneye hem kendi modülünün içinde her yerde<br />

hem de diğer modüllerde ulaşım mümkünse "nesnenin dış bağlantısı vardır" denir.<br />

2. İç bağlantıya sahip nesneler (internal linkage)<br />

Eğer bir nesne tanımlandıktan sonra bu nesneye kendi modülünün içinde her yerde<br />

ulaşılabiliyorsa, ancak projeyi oluşturan diğer modüllerde bu nesneye ulaşılamıyorsa,<br />

"nesnenin iç bağlantısı vardır" denir.<br />

3. Bağlantısız Nesneler (no linkage)<br />

Kendi modülünde ancak belirli bir blok içinde bilinen nesnelerdir.<br />

Bir işlevin parametre değişkenleri ve bir işlev içinde tanımlanan yerel nesneler bağlantısız<br />

nesnelerdir. Bu nesnelere projeyi oluşturan diğer modüllerde ulaşmak mümkün değildir.<br />

Global değişkenler normal olarak dış bağlantıya sahiptir. Yani bir global değişkene başka<br />

bir modül içinde ulaşılabilir. Peki projeye ait bir kaynak dosya içinde global bir değişken<br />

tanımlandığı zaman başka bir kaynak dosya içinde bu değişken nasıl kullanılabilir?<br />

347

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!