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

C Standartlarında Kullanılan Bazı Önemli Terimlere İlişkin<br />

Açıklama<br />

C ve C++ standartlarında sıklıkla kullanılan ve derleyicinin kodu yorumlama biçimi<br />

hakkında bilgi veren önemli terimler vardır:<br />

Davranış<br />

Derleyicinin belirli bir kod parçasını yorumlama ve anlamlandırma biçimine "derleyicinin<br />

davranışı" (behavior) denir.<br />

Tanımsız Davranış<br />

C'de ve C++'da bazı ifadeler, derleyiciden derleyiciye değişebilen fakat standartlarda<br />

açık olarak belirtilmemiş olan yorumlama farlılıklarına yol açabilir. Böyle ifadelerden<br />

kaçınmak gerekir. Bu tür ifadelerde derleyicinin davranışına "tanımsız davranış"<br />

(undefined behavior) denir. Programcının böyle ifadeler yazması programlama hatası<br />

olarak kabul edilir. Çünkü eğer bir ifade tanımsız davranış olarak belirleniyorsa bir<br />

sistemde programın çalıştırılması sonucunda nasıl bir durumla karşılaşılacağının hiçbir<br />

güvencesi yoktur. Tanımsız davranışa yol açan kodlar sözdizimi açısından geçerlidir.<br />

Örneğin bir ifadede bir değişken ++ ya da –- işlecinin terimi olarak kullanılmışsa aynı<br />

ifadede o değişken artık bir kez daha yer almamalıdır. Yer alırsa artık tanımsız<br />

davranıştır.<br />

Belirlenmemiş Davranış<br />

Kaynak kodun derleyici tarafından farklı yorumlanabildiği fakat bu konuda seçeneklerin<br />

sınırlı olduğu durumlara belirlenmemiş davranış (unspecified behavior) denir. Derleyiciler<br />

belirsiz davranışlarda hangi seçeneğin seçilmiş olduğunu belgelemek zorunda değildir.<br />

Şüphesiz programcının belirsiz davranışa yol açacak ifadelerden kaçınması gerekir.<br />

Derleyiciye Özgü Davranış<br />

C dilinin bazı özellikleri, esneklik sağlamak amacı ile standartlarda derleyici yazanların<br />

seçimlerine bırakılmıştır. Örneğin int türünün uzunluğunun ne olduğu, varsayılan char<br />

türünün signed mı unsigned mı olduğu, iç içe yorumlamaların kabul edilip edilmediği<br />

tamamen derleyici yazanlara bağlıdır. Derleyiciler, bu özelliklerin nasıl seçildiklerini<br />

belgelemek zorundadır. Bu tür davranışa derleyiciye özgü davranış (implementation<br />

dependent behaviour) denir. Bu davranış özellikleri pekçok derleyicide menülerden<br />

değiştirilebilmektedir.<br />

Bulgu İletileri<br />

C standartları temel olarak derleyiciyi yazanlar için bir klavuz biçimindedir. Derleyici<br />

sorunlu bir kodla karşılaştığında uygun dönüştürme işlemlerini yapamıyorsa sorunun<br />

nedenine ilişkin bir bildirimde bulunmak zorundadır. Standartlarda derleyicilerin sorunu<br />

programcıya bildirme durumuna "bulgu iletisi" (diagnostic message) denmektedir.<br />

Standartlar içinde belirtilmiş olan sözdizimsel ve anlamsal kuralların çiğnendiği<br />

durumlarda bir uyarı iletisi verilmelidir. Bu iletinin uyarı (warning) ya da hata (error)<br />

biçiminde olması, derleyicinin isteğine bırakılmıştır.<br />

Ancak derleyicilerin hemen hepsinde uyarılar, derleyiciler tarafından giderilebilecek küçük<br />

yanlışlar için, hata ise daha büyük yanlışlar için verilir.<br />

Örneğin bir göstericiye farklı türden bir adresin doğrudan atanması C'nin kurallarına<br />

aykırıdır. Bu durumda derleyici standartlara göre bir ileti vermelidir. Aslında standartlara<br />

göre, uyarı ya da hata iletisi verilebilir, ama C derleyicilerinin hemen hepsi uyarı iletisi<br />

verir.<br />

Standartlarda bazı kuralların çiğnenmesi durumunda derleyicinin açıkça bir ileti<br />

vermeyebileceği belirtilmiştir (nodiagnostic required). Aslında C standartlarında belirtildiği<br />

gibi kural çiğnenmeleri durumunda derleyicinin işlemi başarı ile bitirip bitirmeyeceği<br />

açıkça belirtilmemiştir. Yani standartlara göre derleyici, doğru bir programı<br />

derlemeyebilir, yanlış bir programı derleyebilir.<br />

81/529

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

Saved successfully!

Ooh no, something went wrong!