Değişkenler

Bir değişken herhangi bir büyük veya küçük karakter kullanılarak tanımlanabilir. Değişkenin ilk karakteri sayısal dijit veya alt çizgi karakteri olmamalıdır. Değişken isimler büyük veya küçük harfe duyarlıdır.

Değişkenlerin kullanılma hedefi, kullanıldığı yere göre tanımlanır. Eğer ki değişken bloğun veya parametre listesinin dışında tanımlanmışsa, o zaman değişken hedef dosyasıdır. Bunun anlamıda , kaynak kod dosyasının herhangi bir yerinden değişkene ulaşılabilir. Normalde bu değişkenlere “global değişken (global variable) adı verilir ve kaynak kodun en üstünde tanımlanır.

Diğer bütün değişken türleri, lokal değişkenlerdir. Eğer ki değişken bir blok içerisinde tanımlanmışsa (Yani { ve } ile çevrilmişse  ), değişkenin faliyeti, değişken tanımlandığı anda başlar ve } girildiğinde de biter. Buda blok faaliyeti olarak algılanır. Eğer ki değişken fonksiyonun içinde tanımlanmışsa, o değişkene sadece fonksiyon içinde ulaşılabilir. Buna da fonksiyon protatipi denir.

Değişkene farklı bir dosya hedefinden ulaşım bağlantı (linkage) kullanılarak yapılabilir.  Bağlantı da değişkenin tanımından önce “extern” kelimesi kullanılarak yapılır. Bu da değişkene farklı bir kaynak kodundan ulaşılmasını sağlar.

Fonksiyon faliyetleri içinde tanımlanmış değişkenler otomatik depolama sürelerine sahiptir. Değişkenin ömrü ise fonksiyonun süresi tarafından hesaplanır. Boşluk (space) fonksiyonun başında bulunmaktadır ve fonksiyonun sonuna yönlendirilmiştir. Sabit depolama süresi, değişkenin önüne “static”kelimesi getirilerek elde edilebilir. Bu da değişken boşluğun program başladığında  yerleşmesine sebep olur ve programın süresi boyunca devam eder. Değişkenin değeri fonksiyon değerini alt sırada ki çağırımları süresince korunur. Dosya faaliyetleri değişkenleri durgun değişkenlerdir.

Bir değişken aşağıdakiler tarafından tanımlanır:

storage-class-specifier type-specifier variable-names,…

“storage-class”-belirteci aşağıdakilerden biri tarafından tanımlanabilir:

typedef“variable-name”  sembolü, türünün tip-belirleyicisi olur (type-specifier). Aslında herhangi bir değişken üretilmemiş olup işlemin kolaylığı içindir.
externDosyanın dışarıda ki bir dosya içinde tanımlandığını belirtir. Bu da değişken hedefinin, güncel dosya getirilmesini sağlar. Aslında herhangi bir değişkende tanımlanmamıştır.
staticFonksiyon içinde tanımlanmış değişkenin dışarıdan gelebilecek çağrılardan korunmasına sebep olur.
autoLokal değişkenin lokal ömrüne sahip olmasına sebep olur(default)
registerdeğişkenin en hızlı şekilde ulaşılabilmesini ister.Bu istek kesin olarak garanti altında değildir.Normalde, değişkenin değeri  CPU registerinde maksimum hızda saklanır.

Tür belirtecisi aşağıdilerden biri olabilir:

voidBoş veya anlamsız türü tamamlanmamış değeri tanımlar.
char, signed charDeğişken basit karakter setlerini depolayacak kadar büyük alana sahiptir.Değer ya signed (işaretli) veya artıdır.(non-signed)
unsigned charKarakter gibi, fakat işaretsiz değerler için.
short, signed short, short int, signed short int Kısa işaretli integer’leri tanımlar. normal integer ile veya normal integer bitinin yarısı ile aynı değer aralığına sahip olabilir.
unsigned short, unsigned short intİşaretsiz kısa integer’ı tanımlar.
int, signed, signed int, or no type specifierİşaretli integer’i tanımlar. Eğer ki belirtecin tipi belirtilmemişse, bu defaulttur..
unsigned int, unsignedinteger gibi olup işaretsiz değerler içindir.
long, signed long, long int, signed long intUzun işaretli integer’ı tanımlar. Normal integer’ın iki katı bit uzunluğunda olabilir veya normal integer ile aynı uzunluktadır.
unsigned long, unsigned long intUzun integer gibidir fakat işaretsiz değerlerde kullanılır.
floatFloat nokta numarasıdır. işaretli ve mantissa (1’den büyük veya eşit sayı), ve exponent içerir. Mantisa ilk önce exponent’in katını sonra da işaretini alır. Exponent ayrıca işaretli çok küçük kesirlilere izin verir. Mantisa değişkene sınırlı hassasiyet kazandırır.
doubleDaha hassas float noktası numarası içerir. Normalde bit değerinin iki katı uzunluğundadır.
long doubledouble integerin değerini arttırır.

Aşağıda tip belirteçlerinin uygulamalarda en fazla kullanılan maximum ve minimum  boyutları belirtilmiştir.

Not: Bazı uygulamalar farklı özellikte olabilir.

TürBoyutUzunluk
unsigned char8 bits0 to 255
char8 bits-128 to 127
unsigned int16 bits0 to 65,535
short int16 bits-32,768 to 32,767
int16 bits-32,768 to 32,767
unsigned long32 bits0 to 4,294,967,295
long32 bits-2,147,483,648 to 2,147,483,647
float32 bits1.17549435 * (10^-38) to 3.40282347 * (10^+38)
double64 bits2.2250738585072014 * (10^-308) to 1.7976931348623157 * (10^+308)
long double80 bits3.4 * (10^-4932) to 1.1 * (10^4932)

Örnekler:

int bob=32;

“bob” değişkenini tanımlar ve değerini 32 yapar.

char loop1,loop2,loop3='\x41';

Üç değişken üretir. “loop1”  değeri ve loop2 değeri değersiz, loop3 ise “A” harfine eşlenmiştir.

typedef char boolean;

“boolean”  anahtar sözcüğünün değişken tür “char” oluşmasını sağlar.

boolean yes=1;

“yes”‘ i karakter olarak ayarlayıp değerini 1 yapar.

1.2.2 Variables

A variable may be defined using any uppercase or lowercase character, a numerical digit (0 through 9), and the underscore character (_). The first character of the variable may not be a numerical digit or underscore. Variable names are case sensitive.

The scope of the variable (where it can be used), is determined by where it is defined. If it is defined outside any block or list of parameters, then it has file scope. This means it may be accessed anywhere in the current source code file. This is normally called a global variable and is normally defined at the top of the source code. All other types of variables are local variables. If a variable is defined in a block (encapsulated with { and }), then its scope begins when the variable is defined and ends when it hits the terminating }. This is called block scope. If the variable is defined in a function prototype, then the variable may only be accessed in that function. This is called function prototype scope.

Access to variables outside of their file scope can be made by using linkage. Linkage is done by placing the keyword extern prior to a variable declaration. This allows a variable that is defined in another source code file to be accessed.

Variables defined within a function scope have automatic storage duration. The life of the variable is determined by the life of the function. Space is allocated at the beginning of the function and terminated at the end of the function. Static storage duration can be obtained by placing the keyword static in front of the variable declaration. This causes the variable’s space to be allocated when the program starts up and is kept during the life of the program. The value of the variable is preserved during subsequent calls to the function that defines it. Variables with file scope are automatically static variables.

A variable is defined by the following:

storage-class-specifier type-specifier variable-names,…

The storage-class-specifier can be one of the following:

typedefThe symbol name “variable-name” becomes a type-specifier of type “type-specifier“. No variable is actually created, this is merely for convenience.
externIndicates that the variable is defined outside of the current file. This brings the variables scope into the current scope. No variable is actually created by this.
staticCauses a variable that is defined within a function to be preserved in subsequent calls to the function.
autoCauses a local variable to have a local lifetime (default).
registerRequests that the variable be accessed as quickly as possible. This request is not guaranteed. Normally, the variable’s value is kept within a CPU register for maximum speed.

The type-specifier can be one of the following:

voidDefines an empty or NULL value whose type is incomplete.
char, signed charVariable is large enough to store a basic character in the character set. The value is either signed or nonnegative.
unsigned charSame as char, but unsigned values only.
short, signed short, short int, signed short intDefines a short signed integer. May be the same range as a normal int, or half the bits of a normal int.
unsigned short, unsigned short intDefines an unsigned short integer.
int, signed, signed int, or no type specifierDefines a signed integer. If no type specifier is given, then this is the default.
unsigned int, unsignedSame as int, but unsigned values only.
long, signed long, long int, signed long intDefines a long signed integer. May be twice the bit size as a normal int, or the same as a normal int.
unsigned long, unsigned long intSame as long, but unsigned values only.
floatA floating-point number. Consists of a sign, a mantissa (number greater than or equal to 1), and an exponent. The mantissa is taken to the power of the exponent then given the sign. The exponent is also signed allowing extremely small fractions. The mantissa gives it a finite precision.
doubleA more accurate floating-point number than float. Normally twice as many bits in size.
long doubleIncreases the size of double.

Here are the maximum and minimum sizes of the type-specifiers on most common implementations. Note: some implementations may be different.

TypeSizeRange
unsigned char8 bits0 to 255
char8 bits-128 to 127
unsigned int16 bits0 to 65,535
short int16 bits-32,768 to 32,767
int16 bits-32,768 to 32,767
unsigned long32 bits0 to 4,294,967,295
long32 bits-2,147,483,648 to 2,147,483,647
float32 bits1.17549435 * (10^-38) to 3.40282347 * (10^+38)
double64 bits2.2250738585072014 * (10^-308) to 1.7976931348623157 * (10^+308)
long double80 bits3.4 * (10^-4932) to 1.1 * (10^4932)

Examples:

int bob=32;
Creates variable “bob” and initializes it to the value 32.

char loop1,loop2,loop3='\x41';
Creates three variables. The value of “loop1” and “loop2” is undefined. The value of loop3 is the letter “A”.

typedef char boolean;
Causes the keyword “boolean” to represent variable-type “char”.

boolean yes=1;
Creates variable “yes” as type “char” and sets its value to 1.

DEĞİŞMEZLER

Veriler ya nesnelerin içinde ya da doğrudan değişmez (sabit – constant) biçiminde
bulunur. Değişmezler nesne olmayan, programcı tarafından doğrudan sayısal büyüklük
olarak girilen verilerdir. Değişmezlerin sayısal değerleri derleme zamanında tam olarak
bilinir. Örneğin:

x = y + z;

ifadesi bize y ve z içindeki değerlerin toplanacağını ve sonucun x değişkenine
aktarılacağını anlatır. Oysa

d = x + 10;

ifadesinde x değişkeni içinde saklanan değer ile 10 sayısı toplanmıştır. Burada 10 sayısı
herhangi bir değişkenin içindeki değer değildir, doğrudan sayı biçiminde yazılmıştır.

Değişmezlerin Türleri
Nesnelerin türleri olduğu gibi değişmezlerin de türleri vardır. Nesnelerin türleri bildirim
yapılırken belirlenir. Değişmezlerin türlerini ise derleyici, belirli kurallara uyarak
değişmezlerin yazılış biçimlerinden saptar. Değişmezlerin türleri önemlidir, çünkü C
dilinde değişmezler, değişkenler ve işleçler bir araya getirilerek ifadeler (expressions)
oluşturulur. C’de ifadelerin de türü vardır. İfadelerin türleri, içerdikleri değişmez ve
değişkenlerin türlerinden elde edilir.

Tamsayı Değişmezleri

Tamsayı değişmezlerinin (integer constants) değerleri tamsayıdır.
Bir tamsayı değişmezi


signed int
unsigned int
signed long
unsigned long

türlerinden olabilir.
Bir tamsayı değişmezinin türü, yazımında kullanılan sayı sistemine ve değişmezin aldığı
soneke göre belirlenir.

Tamsayı Değişmezlerinin Onluk Onaltılık ve Sekizlik Sayı Sistemlerinde Yazımı
Varsayılan yazım onluk sayı sistemidir.
Onaltılık sayı sisteminde yazım:
0Xbbb..
ya da
0xbbb..
biçimindedir. Burada b karakterleri onaltılık sayı sistemindeki basamakları gösteriyor.
9’dan büyük basamak değerleri için A, B, C, D, E, F karakterleri ya da a, b, c, d, e, f
karakterleri kullanılır.
Sekizlik sayı sisteminde yazım:
0bbbb..

biçimindedir.
Burada b karakterleri sekizlik sayı sistemindeki basamakları (0 1 2 3 4 5 6 7) gösteriyor.

Tamsayı Değişmezlerinin Aldığı Sonekler

Bir tamsayı değişmezi, hangi sayı sisteminde yazılırsa yazılsın,
u, U, l ya da L soneklerini alabilir.
u ya da U sonekleri tamsayı değişmezinin işaretsiz tamsayı türünden olduğunu belirler.
l ya da L sonekleri tamsayı değişmezinin long türden olduğunu belirler.
l soneki 1 karakteri ile görsel bir karışıklığa neden olabileceğinden, ‘L’ soneki
kullanılmalıdır. Bir karakter değişmezi hem u, U soneklerinden birini hem de l, L
soneklerinden birini alabilir. Bu durumda soneklerin yazım sırasının bir önemi yoktur.

Tamsayı Değişmezlerinin Türleri

Tamsayı değişmezinin türü aşağıdaki tabloya göre belirlenir: