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. extern
Dosyanı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. static
Fonksiyon içinde tanımlanmış değişkenin dışarıdan gelebilecek çağrılardan korunmasına sebep olur. auto
Lokal değişkenin lokal ömrüne sahip olmasına sebep olur(default) register
değ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:
void
Boş veya anlamsız türü tamamlanmamış değeri tanımlar. char, signed char
Değ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 char
Karakter 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, unsigned
integer gibi olup işaretsiz değerler içindir. long, signed long, long int, signed long int
Uzun 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 int
Uzun integer gibidir fakat işaretsiz değerlerde kullanılır. float
Float 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. double
Daha hassas float noktası numarası içerir. Normalde bit değerinin iki katı uzunluğundadır. long double
double 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ür | Boyut | Uzunluk |
unsigned char | 8 bits | 0 to 255 |
char | 8 bits | -128 to 127 |
unsigned int | 16 bits | 0 to 65,535 |
short int | 16 bits | -32,768 to 32,767 |
int | 16 bits | -32,768 to 32,767 |
unsigned long | 32 bits | 0 to 4,294,967,295 |
long | 32 bits | -2,147,483,648 to 2,147,483,647 |
float | 32 bits | 1.17549435 * (10^-38) to 3.40282347 * (10^+38) |
double | 64 bits | 2.2250738585072014 * (10^-308) to 1.7976931348623157 * (10^+308) |
long double | 80 bits | 3.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:
typedef
The symbol name “variable-name” becomes a type-specifier of type “type-specifier“. No variable is actually created, this is merely for convenience. extern
Indicates 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. static
Causes a variable that is defined within a function to be preserved in subsequent calls to the function. auto
Causes a local variable to have a local lifetime (default). register
Requests 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:
void
Defines an empty or NULL value whose type is incomplete. char, signed char
Variable is large enough to store a basic character in the character set. The value is either signed or nonnegative. unsigned char
Same as char, but unsigned values only. short, signed short, short int, signed short int
Defines 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 int
Defines 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, unsigned
Same as int, but unsigned values only. long, signed long, long int, signed long int
Defines 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 int
Same as long, but unsigned values only. float
A 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. double
A more accurate floating-point number than float. Normally twice as many bits in size. long double
Increases 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.
Type | Size | Range |
unsigned char | 8 bits | 0 to 255 |
char | 8 bits | -128 to 127 |
unsigned int | 16 bits | 0 to 65,535 |
short int | 16 bits | -32,768 to 32,767 |
int | 16 bits | -32,768 to 32,767 |
unsigned long | 32 bits | 0 to 4,294,967,295 |
long | 32 bits | -2,147,483,648 to 2,147,483,647 |
float | 32 bits | 1.17549435 * (10^-38) to 3.40282347 * (10^+38) |
double | 64 bits | 2.2250738585072014 * (10^-308) to 1.7976931348623157 * (10^+308) |
long double | 80 bits | 3.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: