www.fatihkabakci.com

Personal Website and Computer Science TUR EN

C DE SAKLAMA SINIFLARI(STORAGE CLASS)

Last update: 10/2/2014 11:46:00 PM

Yazan:Fatih KABAKCI

C de kullanılan birçok niteleyici veri türlerinin yanı sıra,kullanılan değişkenlerin durumunu bildiren bazı niteleyici veri türleri de bulunmaktadır.Bunlar auto,static,register ve extern deyimleridir.Şimdi bu sıfatları ayrı ayrı inceleyelim.

1.)auto Deyimi:

auto,farklı fonksiyonlarda kullanılan aynı isimli yerel değişkenlerin ‘’yerini’’ vurgulamak için kullanılan bir yer belirleyicisidir.Örneğin x adında bir değişken global olarak ve main fonksiyonunda birden fazla tanımlanmadığı sürece farklı fonksiyonların içinde kullanılabilir.Dolayısıyla bu değişkenin barındırdığı veri türünün başına auto deyimi kullanılır.Şöyleki;

void fonksiyon1() {

auto int sayi1;
}

Void fonksiyon2() {

auto int sayi1;
}

Aslında C derleyicisi buna zaten izin verecektir.Yani bir değişken global olarak tanımlanmamış veya main fonksiyonunda birden çok tanımlama yapılmamışsa,zaten kullanımını diğer fonksiyon gruplarında 1 defaya mahsus suretle kullanılmasına izin verecektir.Yukarıdaki 2 fonksiyon da olduğu gibi sayi1 adlı değişken(variable) iki ayrı yerde tanımlanabilir.Bunun için auto deyiminin kullanımı zorunlu değildir.Fakat bazı istisnai durumlarda programcıya değişkenin durumu hakkında bilgi vermesi faydalı olabilir.Bu nedenle auto yer belirleyicisi özel durumlarda kullanılabilir.

2.)static Deyimi:

Fonksiyonlarda tanımlanan değişkenler sadece tanımlandıkları fonksiyonlarda yaşamlarını Sürdürürler.İşletim sırasında,fonksiyonun kapanış bloğuna ulaşıldığında,yani fonksiyonun görevini tamamlaması durumunda,o fonksiyonda tanımlanmış değişkenlerin RAM’de işgal ettikleri yer belleğe geri verilir.Fakat,static olarak tanımlanan değişkenler,tanımlanmış olduğu fonksiyonun işlevi sona erse bile,program boyunca bellekte kalmaya devam ederler.Static değişkenlerin bir diğer özelliği ise,tanımlandıkları değişkenler üzerinde ilk değer ataması yapılmamışsa,otomatik olarak değişkenin durumuna göre 0 veya NULL değerinin ataması yapılmasıdır.

Örneğin,
static int sayi;
printf(“%d”,sayi);

// static tipinde belirlenmiş bu değişken printf ile output işleminin sonucunda ekranda 0 değerini gösterecektir.Bir başka örneğimize bakacak olur isek, int sayi; printf(“%d”,sayi); // Static olarak tanımlanmayan değişken,burada ise bellekte bulunduğu herhangi bir adresi gösterecektir.

Son olarak static bildirimle tanımlanmış değişkenler,maruz kaldığı işlemler sonucunda,son değerlerini her zaman korurlar.Şayet yeni bir işte kullanılacak olurlarsa,mevcut değerlerini koruyarak yeni işlerine o değerleri üzerinden devam ederler.Örnek olarak aşağıdaki kod parçasını inceleyelim.

       while(1) {
       static int sayi=0;
       printf("%d\n",sayi);
       sayi++;
       if(sayi==5)
       break;
       }

Yukarıdaki true döngüsü normalde static deyimi ile kullanılmasaydı ölü döngü(infinite loop) Yani sonsuz bir döngü olmuş olacak sürekli ekrana 0 değerini basacaktı.(çünkü her seferinde static int sayi=0 ifadesi ile değişken 0’a dönecektir).Fakat static bildirimi yapılan değişkenimiz her seferinde son değerini koruyarak,sanki int sayi=0 ifadesini görmüyormuş gibi her seferinde mevcut değeri üzerinden devam edecektir.ilk olarak 0,daha sonra sırasıyla 1,2,3,4 olarak ekrandaki değerlerini basacaktır.Nihayetinde değişken değeri 5 olduğunda ise döngüyü terk etmiş olacaktır.

3.)register Deyimi

Programlarda tanımlanan değişkenler,işletim sırası geldiğinde tek tek merkezi işletim birimine(CPU) taşınırlar.Gerekli işlemleri yapıldığında tekrar hafıza(memory) bölgesine geri gönderilirler.Tanımlanan değişkenler her zaman bu sistemde organize olarak işletilirler.Bu durum sık sık yapılan işlerde zahmetli ve zaman kaybı olabilir.Bunun en açık örneği döngü sayaçları…Bilindiği üzere döngüler bizlerin,defalarca aynı kod satırlarını yazmamızı engelleyerek daha az komut satırlarıyla bir işi çok hızlı yapmamıza olanak verir.İşte bu yüzden döngü sayaçları her defasında CPU’da işletilip,belleğe geri iadesi oldukça zahmetli olup ve merkezi işletim birimi ile hafıza arasında sürekli bu işlemleri yaparak sistemin yavaşlamasına neden olacaktır.Bu nedenle alternatif çözüm olarak değişkenlerin bellekte tutulması yerine merkezi işlem birimindeki register’larda tutulması hız açısından,dolayısıyla zaman hususunda etkili olacaktır.

4.)extern Deyimi

Harici C/C++ dosyaları arasında global bir değişken görevinde kullanılmaktadır.Microsoftun MSDN kütüphanesinde bir örneği aşağıdaki gibi verilmiştir.

int i = 1;
void other();
int main() {
   // Reference to i, defined above:
   extern int i;
}
void other() {
   // Address of global i assigned to pointer variable:
   static int *external_i = &i;

   // i will be redefined; global i no longer visible:
   // int i = 16;
}

Yukarıdaki örnekte görüldüğü gibi global i değişkenine referans model sayesinde ilgili veri kullanımı geçerli olmaktadır.

Bir başka örnekte harici dosya içerisinde bulunan bir değişkenin,başka bir c dosyası içerisinde kullanımı verilmiştir

dosya1.h

extern int global;

dosya2.c

int main() { global=1; }

Yukarıdaki örnekten de görüldüğü gibi dosya1 header içerisinde tanımlanan global isimli veri kullanılmıştır.

MemberCommentDate:
guest
teşekkürler.

11/4/2019 10:23:00 AM
guest
Emeğinize sağlık güzel çok güzel anlatmışsınız.

Özgün

3/11/2017 6:56:00 AM
guest
paylaşım için teşekkürler 

melike
10/26/2016 9:45:00 AM

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Spring Boot, Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.