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 />

Standart C İşlevleri<br />

Standard C işlevleri, C dilinin standartlaştırılmasından sonra, her derleyicide bulunması<br />

zorunlu hale getirilmiş işlevlerdir. Yani derleyicileri yazanlar standart C işlevlerini kendi<br />

derleyicilerinde mutlaka tanımlamak zorundadırlar. Bu durum C dilinin taşınabilirliğini<br />

(portability) artıran ana etmenlerden biridir.<br />

Bir işlevin derleyiciyi yazanlar tarafından tanımlanmış ve derleyici paketine eklenmiş<br />

olması, o işlevin standart C işlevi olduğu anlamına gelmez. Derleyiciyi yazanlar<br />

programcının işini kolaylaştırmak için çok çeşitli işlevleri yazarak derleyici paketlerine<br />

eklerler. Ama bu tür işlevlerin kullanılması durumunda, oluşturulan kaynak kodun başka<br />

bir derleyicide derlenebilmesi yönünde bir güvence yoktur, yani artık kaynak kodun<br />

taşınabilirliği azalır. Örneğin printf işlevi standart bir C işlevidir. Yani printf işlevi her<br />

derleyici paketinde aynı isimle bulunmak zorundadır.<br />

Standart C işlevlerinin derlenmiş kodları özel kütüphanelerin içindedir. Başlık dosyaları<br />

içinde, yani uzantısı .h biçiminde olan dosyaların içinde standart C işlevlerinin bildirimleri<br />

bulunur. İşlev bildirimi konusu ileride ayrıntılı bir biçimde incelenecek.<br />

Kütüphaneler (libraries), derlenmiş dosyalardan oluşur. DOS işletim sisteminde<br />

kütüphane dosyalarının uzantısı .lib, UNIX işletim sisteminde ise .a (archive) biçimindedir.<br />

WINDOWS altında uzantısı .dll biçiminde olan dinamik kütüphaneler de bulunur.<br />

Derleyicileri yazanlar tarafından kaynak kodu yazılmış standart C işlevleri önce derlenerek<br />

.obj haline getirilirler ve daha sonra aynı gruptaki diğer işlevlerin .obj halleriyle birlikte<br />

kütüphane dosyalarının içine yerleştirilirler. Standart C işlevleri bağlama aşamasında,<br />

bağlayıcı (linker) tarafından çalışabilir (.exe) kod içine yazılırlar. Tümleşik çalışan<br />

derleyicilerde bağlayıcılar, amaç kod içinde bulamadıkları işlevleri, yerleri önceden<br />

belirlenmiş kütüphaneler içinde arar. Oysa komut satırlı uyarlamalarda (command line<br />

version) bağlayıcıların hangi kütüphanelere bakacağı komut satırında belirtilir.<br />

Neden Standart İşlevler<br />

Bazı işlevlerin bulunmasının dilin standartları tarafından güvence altına alınması ile<br />

aşağıdaki faydalar sağlanmış olur.<br />

i) Bazı işlemler için ortak bir arayüz sağlanmış olur.<br />

Mutlak değer hesaplayan bir işlevi yazmak çok kolaydır. Ancak standart bir C işlevi olan<br />

abs işlevinin kullanılmasıyla ortak bir arayüz sağlanır. Her kaynak kod kendi mutlak değer<br />

hesaplayan işlevini tanımlamış olsaydı, tanımlanan işlevlerin isimleri, parametrik yapıları<br />

farklı olabilirdi. Bu durum da kod okuma ve yazma süresini uzatırdı.<br />

ii) Bazı işleri gerçekleştirecek işlevlerin kodları sistemden sisteme farklılık gösterebilir. Bu<br />

da kaynak dosyanın taşınabilirliğini azaltır. Bu işlemleri yapan standart işlevlerin<br />

tanımlanmış olması kaynak kodun başka sistemlere taşınabilirliği artırır.<br />

iii) Bazı işlevlerin yazılması belirli bir alanda bilgi sahibi olmayı gerektirebilir. Örneğin bir<br />

gerçek sayının bir başka gerçek sayı üssünü hesaplayan bir işlevi verimli bir şekilde<br />

yazabilmek için yeterli matematik bilgisine sahip olmak gerekir.<br />

iv) Sık yapılan işlemlerin standart olarak tanımlanmış olması, programcının yazacağı kod<br />

miktarını azaltır. Böylece proje geliştirme süresi de kısalır.<br />

v) Derleyicilerin sağladığı standart işlevler çok sayıda programcı tarafından kullanılmış<br />

olduğu için çok iyi derecede test edilmişlerdir. Bu işlevlerin tanımlarında bir hata olma<br />

olasılığı, programcının kendi yazacağı işlevlerle kıyaslandığında çok düşüktür.<br />

İyi bir C programcısının C dilinin standart işlevlerini çok iyi tanıması ve bu işlevleri yetkin<br />

bir şekilde kullanabilmesi gerekir.<br />

64/529

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

Saved successfully!

Ooh no, something went wrong!