82 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Bir tanıtıcının faaliyet alanı, tanıtıcının kod içinde kullanılabileceği program kısmıdır. Örneğin, bir blok içinde yerel değişken bildirirsek, bu değişken yalnızca o blok içinde ya da o bloğun içine yuvalanmış bloklarda kullanılabilir. Bir tanıtıcının 4 faaliyet alanı şu şekilde adlandırılır: fonksiyon faaliyet alanı, dosya faaliyet alanı, blok faaliyet alanı ve fonksiyon prototipi faaliyet alanı.
83 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Etiketler (bir tanıtıcının sonuna iki nokta üst üste konurak oluşturulur, örneğin basla: ) fonksiyon faaliyet alanına sahip tek tanıtıcıdır. Etiketler, bulundukları fonksiyon içinde her yerde kullanılabilirler ancak fonksiyon gövdesi dışında kullanılamazlar. Etiketler, switch yapılarında (case etiketleri gibi) ve goto ifadelerinde kullanılırlar. Etiketler, fonksiyonların diğerlerinden gizledikleri uygulama detaylarıdır. Bu saklama ( daha teknik olarak bilgi saklama ), iyi yazılım mühendisliğinin en temel prensiplerinden biridir.
84 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Herhangi bir fonksiyonun dışında bildirilmiş tanıtıcılar, dosya faaliyet alanına sahiptir. Bu tarzda bir tanıtıcı, bildirildiği yerden dosyanın sonuna kadar tüm fonksiyonlar tarafından bilinir. Global değişkenler, fonksiyon tanımları ve fonksiyon dışına yerleştirilmiş fonksiyon prototipleri dosya faaliyet alanına sahiptir. Bir blok içinde bildirilmiş tanıtıcılar, blok faaliyet alanına sahiptir. Blok faaliyet alanı, bloğu sonlandıran küme parantezine( } ) ulaşıldığında sona erer. Fonksiyonun başında bildirilen yerel değişkenler, fonksiyon parametreleri gibi blok faaliyet alanına sahiptir ve fonksiyon için yerel değişkenler olarak bilinirler. Herhangi bir blok, değişken bildirimleri içerebilir.
85 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Bloklar yuvalandığında ve dıştaki bloktaki tanıtıcı içteki bloktaki tanıtıcıyla aynı isme sahip olduğunda, dış bloktaki tanıtıcı iç blok sona erene kadar saklanır. Bu, içteki blok çalıştırılırken içteki bloğun yalnızca kendi yerel tanıtıcısının değerini göreceği ve dışındaki blokta yer alan ve aynı isme sahip olan tanıtıcının değerini kullanmayacağı anlamına gelir. static olarak bildirilmiş yerel değişkenler, program çalışmaya başladığı andan itibaren var olsalar da hala blok faaliyet alanına sahiptirler. Bu sebepten, depolama süreci bir tanıtıcının faaliyet alanını etkilemez. Fonksiyon prototipi faaliyet alanına sahip tek tanıtıcı, fonksiyon prototipinin parametre listesinde kullanılan tanıtıcılardır.
86 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Daha önceden bahsedildiği gibi, fonksiyon prototiplerinin parametre listelerinde isim olması gerekmez, derleyici bu isimleri ihmal eder. Fonksiyon prototipinde kullanılan tanıtıcılar, programın herhangi bir yerinde karışıklık olmadan yeniden kullanılabilir. B05_Ornek07.c deglobal değişkenler, otomatik yerel değişkenler ve static yerel değişkenler için faaliyet alanı konularını gösterilmektedir.
87 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Global olarak bir x değişkeni bildirilmiş ve bu değişkene ilk değer olarak 1 atanmıştır. Bu global değişken, x adında bir değişkenin bildirildiği herhangi bir bloktan (ya da fonksiyon) gizlenmiştir.
88 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) main içinde x yerel değişkeni bildirilmiş ve bu değişkene ilk değer olarak 5 atanmıştır. Daha sonra bu değişken yazdırılarak main içinde global değişken olan x in saklandığı gösterilmiştir.
89 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) main içinde x yerel değişkeni bildirilmiş ve bu değişkene ilk değer olarak 5 atanmıştır. Daha sonra bu değişken yazdırılarak main içinde global değişken olan x in saklandığı gösterilmiştir.
90 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) main içinde yeni bir blok tanımlanmış ve bu blok içinde başka bir yerel değişken olan x bildirilmiş ve bu değişkene ilk değer olarak 7 atanmıştır.
91 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Bu değer yazdırılarak x in dış blok olan main den saklandığı gösterilmiştir.
92 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) 7 değerine sahip olan x değişkeni, bloktan çıkıldığında otomatik olarak yok edilmiştir ve main dış bloğu içindeki yerel değişken olan x yeniden yazdırılarak artık bu değişkenin daha fazla saklanmadığı gösterilmiştir.
93 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Program, argüman almayan ve geriye değer döndürmeyen üç fonksiyon tanımlamıştır. a fonksiyonu, otomatik bir x değişkeni bildirmiş ve bu değişkene 25 ilk değerini atamıştır. a çağrıldığında değer yazdırılmış, arttırılmış ve fonksiyondan çıkılmadan bir kez daha yazdırılmıştır. Fonksiyon her çağrıldığında x otomatik değişkeni yeniden 25 değerine atanmıştır.
94 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) b fonksiyonu, static bir x değişkenini bildirmekte ve bu değişkene ilk değer olarak 50 atamaktadır. static olarak bildirilen yerel değişkenler, faaliyet alanı dışında olsalar bile değerlerini korurlar. b çağrıldığında x yazdırılmış, arttırılmış ve fonksiyondan çıkılmadan önce bir kez daha yazdırılmıştır. Bu fonksiyonun bir sonraki çağrısında, static yerel değişken x, 51 değerini içerecektir.
95 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) c fonksiyonu, herhangi bir değişken bildirmemektedir. Bu sebepten, x değişkeninden bahsettiğinde, global x değişkeni kullanılmaktadır. c çağrıldığında global değişken yazdırılmakta, 10 ile çarpılmakta ve fonksiyondan çıkılmadan önce bir kez daha yazdırılmaktadır.
96 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B05. C de Fonksiyonlar) Sonuç olarak program, main içindeki yerel değişken x i, fonksiyon çağrılarının hiçbirinin x in değerini değiştirmediğini çünkü tüm fonksiyonların başka faaliyet alanlarındaki değişkenlerden söz ettiğini göstermek için yeniden yazdırılmıştır.