Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

Benzer belgeler
BİLİNİRLİK ALANI ve ÖMÜR, KONTROL DEYİMLERİ

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

ELN1001 BİLGİSAYAR PROGRAMLAMA I

NESNEYE YÖNELİK PROGRAMLAMA

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

C Programlama Dilinde Değişkenler

PROGRAMLAMAYA GİRİŞ DERS 2

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Pointer Kavramı. Veri Yapıları

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

Göstericiler (Pointers)

BLM 112- Programlama Dilleri II. Hafta 1 Giriş, Kapsama Kuralları ve Rasgele Sayı Üretimi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

HSancak Nesne Tabanlı Programlama I Ders Notları

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

HSancak Nesne Tabanlı Programlama I Ders Notları

BİLDİRİM, TANIMLAMA, DEĞİŞMEZLER ve İŞLEVLER

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Ders 2: Veri Tipleri, Değişkenler ve Sabitler

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler

İstanbul Üniversitesi Elektrik Elektronik Mühendisliği GENEL KAVRAMLAR. Kaynak: C ve Sistem Programcıları Derneği Kurs Notu. Öğr.Gör.Dr.

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bölüm 2 - C ile Programlamaya Giriş

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

Programlama Dilleri 1. Ders 4: Diziler

8. İŞARETCİLER (POINTERS)

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Bilgisayar İşletim Sistemleri BLG 312

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Özyineleme (Recursion)

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Dr. Fatih AY Tel: fatihay@fatihay.net

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

C PROGRAMLAMA D İ L İ

Sunum İçeriği. Programlamaya Giriş

BÖLÜM 4: DEĞİŞKENLER, SABİTLER VE OPERATÖRLER

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

Yrd. Doç. Dr. Caner ÖZCAN

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

ALGORİTMA VE PROGRAMLAMA II

BİL-142 Bilgisayar Programlama II

Java Temel Özellikleri

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Döngü (Loop) Deyimleri / Veri Belirleyicileri / Matematiksel Fonksiyonlar

Kocaeli Üniversitesi C Bilgisayar Programlama Ara Sınavı Test Soruları

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir:

Hafta 13 Fonksiyonlar

Öğr. Gör. Serkan AKSU 1

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

C PROGRAMLAMA DİLİNE GİRİŞ

Temel Bilgisayar Programlama

Yrd. Doç. Dr. Caner ÖZCAN

Programlama Dilleri III 1

Veri Yapıları ve Algoritmalar

Programlama Dillerinde Kullanılan Veri Tipleri

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Pointers (İşaretçiler)

10/17/2007 Nesneye Yonelik Programlama 3.1

HSancak Nesne Tabanlı Programlama I Ders Notları

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Bağlama (Binding) Kavramı

Lecture 11: Generics

BTEP243 Ders 3. class Yazım Kuralı:

Sınav tarihi : Süre : 60 dak. c) En başta #include<stdio.h> yazılmamıştır. c) zt d) Pi e) X0

Lambda İfadeleri (Lambda Expressions)

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

/*int sayi1, sayi2,toplam=0;

Karma C/C + + Kodlama

YAPILAR (STRUCTURES)

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

ALGORİTMA VE PROGRAMLAMA I

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

Operator Aşırı Yükleme (Operator OverLoading)

C Dersi Bölüm 1. Bilgisayar Donanımı

Bölüm 9. Altprogramlar ISBN

Genel Programlama II

C Dersleri Bölüm 3 : Program akışı

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

Programlamaya Giriş. Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

Operatörlerin Aşırı Yüklenmesi

C++ Operatörler (Operators)

Veri Tanımları ve Mantıksal İşlemler

Transkript:

Programlama Dilleri 1 Ders 12: Belirleyiciler ve Niteleyiciler

Genel Bakış Giriş Yer Belirleyicilerle Bildirim İşlemi auto Belirleyicisi register Belirleyicisi static Belirleyicisi Statik ve Global Değişkenlerin Karşılaştırılması Modül Kavramı ve Nesnelerin Bağlantı Özelliği Bağlantı Kavramı extern Belirleyicisi Tür Niteleyicileri const Niteleyicisi volatile Niteleyicisi Programlama Dilleri 1 2

Giriş Belirleyiciler (storage class specifiers), bildirimler yapılırken kullanılan ve nesnelerin özellikleri hakkında derleyicilere bilgi veren anahtar sözcüklerdir. C'de kullanılan belirleyiciler şunlardır: auto, register, static, extern ve typedef. Tür niteleyicileri ise nesnelerin içindeki değerlerin değiştirilip değiştirilmeyeceğine ilişkin bilgi verir. Tür belirleyicileri şunlardır: const, volatile. Programlama Dilleri 1 3

Yer Belirleyicilerle Bildirim İşlemi Yer belirleyici, tür belirleyici ya da tür ifade eden anahtar sözcüklerin dizilimi herhangi bir biçimde olabilir: auto const unsigned long int a; const auto unsigned long int a; unsigned long int auto const a; int const long auto unsigned a; Yukarıdaki bildirimlerin hepsi geçerlidir. Ancak okunabilirlik açısından yer belirleyici sözcüğün daha önce yazılması önerilir. Programlama Dilleri 1 4

auto Belirleyicisi auto yalnızca yerel değişkenler için kullanılabilecek bir yer belirleyicisidir. auto belirleyicisinin global değişkenlerin ya da işlevlerin parametre değişkenlerinin bildiriminde kullanılması geçersizdir. Bu anahtar sözcük, nesnenin bilinirlik alanı bittikten sonra kaybolacağını, bellekte kapladığı yerin geçerliliğinin kalmayacağını gösterir. Yerel değişkenler otomatik ömürlüdür. Yani bulundukları bloğa ilişkin kod çalışmaya başlandığında yaratılır, söz konusu bloğun yürütülmesi bittikten sonra yok olurlar. Programlama Dilleri 1 5

auto Belirleyicisi Zaten bir yerel değişken, başka bir yer belirleyici anahtar sözcük kullanılmadığı sürece (default olarak) auto biçiminde ele alınır. Bu durumda auto yer belirleyicisinin kullanımı gereksizdir: auto yer belirleyicisi global değişkenlerle yada parametre değişkenleriyle birlikte kullanılmaz. Örneğin : auto anahtar sözcüğü bazı mikroişlemcilerde uyumu korumak için düşünülmüştür. Modern sistemlerde anlamlı bir kullanımı yoktur. Programlama Dilleri 1 6

register Belirleyicisi register belirleyicisi, değişkenin "bellekte değil de CPU yazmaçlarının içinde" tutulması isteğini derleyiciye ileten bir anahtar sözcüktür. Değişkenlerin bellek yerine doğrudan yazmaçlarda tutulması programın çalışmasını hızlandırır. Yazmaçlar CPU içinde bulunan tampon bellek bölgeleridir. CPU içindeki aritmetik ve mantıksal işlemleri yapan birimin (ALU) yazmaçlar ve belleklerle ilişkisi vardır. Genel olarak CPU tarafından yapılan aritmetik ve mantıksal işlemlerin her iki terimi de belleğe ilişkin olamaz. Programlama Dilleri 1 7

register Belirleyicisi Örneğin bellekte bulunan sayi1 ve sayi2 isimli iki değişken toplanarak elde edilen değer sayi3 isimli başka bir bellek bölgesine yazılmak istensin. sayi3 = sayi1 + sayi2; işlemine karşılık gelir. CPU bu işlemi ancak 3 adımda gerçekleştirebilir: 1. adım : Önce sayi1 bellekten CPU yazmaçlarından birine çekilir. MOV reg, sayi1 2. adım : Yazmaç ile sayi2 toplanır. ADD reg, sayi2 3. adım: Toplam sayi3 ile belirtilen bellek alanına yazılır. MOV sayi3, reg Programlama Dilleri 1 8

register Belirleyicisi Belleğe yazma ve bellekten okuma işlemleri yazmaçlara yazma ve yazmaçlardan okuma işlemlerine göre daha yavaştır.çünkü belleğe erişim için bir makine zamanı gerekir. register belirleyicisi derleyiciye yalnızca bir isteği iletir. Yani register belirleyicisi ile bildirilen değişkenin yazmaçta tutulacağının bir güvencesi yoktur. Derleyiciler böyle bir isteği yerine getirmeyebilir. CPU yazmaçları hangi sistem söz konusu olursa olsun sınırlı sayıdadır. Bu nedenle birkaç değişkenden fazlası register belirleyicisi ile tanımlanmış olsa bile yazmaçlarda saklanmayabilir. C derleyicileri yazmaçlarda saklayamayacakları değişkenler için genel olarak hata veya uyarı iletileri vermez. Programlama Dilleri 1 9

register Belirleyicisi Derleyiciler, tutabilecekleri yazmaç sayısından fazla register belirleyicisine sahip değişkenlerle karşılaştıklarında bunlara ilişkin register belirleyicilerini dikkate almazlar. register belirleyicileri ancak yerel yada parametre değişkenleri ile kullanılabilir. Global değişkenler ile kullanılamazlar. Örnekler: Programlama Dilleri 1 10

static Belirleyicisi static belirleyicisi ancak yerel yada global değişkenlerin bildiriminde kullanılabilir. Bu belirleyici, parametre değişkenlerinin bildiriminde kullanılamaz. static anahtar sözcüğünün global ve yerel değişkenlerin bildiriminde kullanılması farklı anlamlara gelir. Statik yerel değişkenler, tıpkı global değişkenler gibi programın çalışmaya başlamasıyla yaratılır ve programın yürütülmesi bitene kadar da bellekte tutulur. Programlama Dilleri 1 11

static Belirleyicisi static yer belirleyicisi ile tanımlanmış yerel değişkenler yada yerel diziler programın çalışması boyunca bellekte kalır. Başka bir deyişle, static anahtar sözcüğü yerel değişkenlerin ömrünü otomatik ömürden statik ömre yükseltir. Statik yerel değişkenler programcı tarafından ilkdeğer verildikten sonra kullanılır. İlkdeğer verme işlemi programın çalışması sırasında değil, derleme zamanında derleyici tarafından yapılır. Programlama Dilleri 1 12

static Belirleyicisi Derleyici, bellekten yer ayrılmasına yol açacak makine kodunu oluşturur. Statik yerel değişken için bellekte yer ayrılması, programın yüklenmesi sırasında gerçekleşir. Derleme zamanında gerçekte bellekte yer ayrılmaz. Bellekte yer ayırma işini yapacak makine kodu üretilir. Statik yerel değişkenler ilk değerleriyle birlikte belleğe yüklenir. Programlama Dilleri 1 13

static Belirleyicisi Programlama Dilleri 1 14

Statik ve Global Değişkenlerin Karşılaştırılması Statik yerel değişkenler ömür açısından global değişkenler ile aynı özellikleri gösterirler. Yani programın çalışmaya başlaması ile oluşturulurlar ve programın çalışması bitince ömürleri sona erer. Bilinirlik alanı açısından farklılık gösterirler. Global değişkenler dosya bilinirlik alanına uyarken statik yerel değişkenler blok bilinirlik alanına uyar. Statik yerel değişkenlerin blok bilinirlik alanına sahip olması verilerin gizlenmesini (data hiding) kolaylaştırır ve kodun yeniden kullanılabilirliğini (reusability) artırır. Çünkü global değişkenlere bağlı olan işlevler bir projeden bir başka projeye kolayca taşınamazlar. Programlama Dilleri 1 15

Modül Kavramı ve Nesnelerin Bağlantı Özelliği Bir proje, birbirinden bağımsız olarak derlenebilen birden fazla kaynak dosyadan oluşabilir. Projelerin bağımsız olarak derlenebilen her bir kaynak dosyasına "modül" denir. Bir projeyi oluşturan farklı kaynak dosyalar birbirinden bağımsız olarak derlendikten sonra, hepsi birlikte bağlayıcı (linker) ile birleştirilerek tek bir çalıştırılabilir dosyayı oluştururlar. Programlama Dilleri 1 16

Bağlantı Kavramı Projeyi oluşturan kaynak dosyaların birinde tanımlanan bir isme, projeyi oluşturan başka bir kaynak dosya içinde ulaşılabilir mi? Bu kaynak dosyalar en sonunda tek bir çalışır dosyayı oluşturacaklarına göre, bazı durumlarda bir modülde tanımlanan bir nesneye başka bir modülde ulaşmak istenmesi son derece doğaldır. Bir modülde tanımlanmış bir değişkenin başka bir modülde kullanılıp kullanılmayacağını gösteren özelliğe o nesnenin bağlantı özelliği (linkage) denir. Programlama Dilleri 1 17

Bağlantı Kavramı Bağlantı özelliği bilinirlik alanından farklıdır. Bilinirlik alanı derleyiciyi ilgilendiren yani derleme zamanına ilişkin bir kavramdır. Bir nesne bilinirlik alanı dışında kullanılırsa derleme zamanında hata oluşur. Ancak bağlantı, bağlayıcı programı ilgilendiren yani bağlama zamanına ilişkin bir kavramdır. Bir nesne, bağlantısının olmadığı bir modülde kullanılırsa bağlama zamanında hata oluşur. Programlama Dilleri 1 18

Bağlantı Kavramı C standartlarına göre nesneler bağlantı özellikleri açısından 3 ana gruba ayrılır. 1. Dış bağlantıya sahip nesneler (external linkage) Eğer bir nesne tanımlandıktan sonra, bu nesneye hem kendi modülünün içinde her yerde hem de diğer modüllerden ulaşım mümkünse "nesnenin dış bağlantısı vardır" denir. 2. İç bağlantıya sahip nesneler (internal linkage) Eğer bir nesne tanımlandıktan sonra bu nesneye kendi modülünün içinde, her yerden ulaşılabiliyorsa, ancak projeyi oluşturan diğer modüllerde bu nesneye ulaşılamıyorsa, "nesnenin iç bağlantısı vardır" denir. 3. Bağlantısız Nesneler (no linkage) Kendi modülünde ancak belirli bir blok içinde bilinen nesnelerdir. Programlama Dilleri 1 19

extern Belirleyicisi extern belirleyicisi ile bir bildirim yapılır. Bir değişkenin extern belirleyicisi ile bildirilmesi derleyiciye nesnenin başka bir modülde tanımlandığını anlatır. Bir proje mod1.c ve mod2.c isimli iki kaynak dosyadan oluşmuş olsun : Programlama Dilleri 1 20

extern Belirleyicisi mod1.c dosyasında tanımlanmış olan a değişkeni global bir değişkendir ve dış bağlantıya sahip olduğu için normal olarak proje içindeki diğer kaynak dosyalarda da kullanılabilir. mod2.c dosyasında da bu değişkene ulaşılabilir. Fakat iki modülün ayrı ayrı derlendiği örnekte problemli bir durum söz konusudur. Çünkü mod2.c dosyasının derlenmesi sırasında derleyici a değişkeninin mod1.c kaynak dosyası içinde global olarak tanımlandığını bilemez. mod2.c kaynak dosyasını derlerken a değişkeni hakkında bilgi bulamayan derleyici bu durumu hata olarak belirler. extern belirleyicisi derleyiciye, ilgili global değişkeninin kendi modülü içinde değil de bir başka modül içinde tanımlı olduğunu bildirmek amacıyla kullanılır. Programlama Dilleri 1 21

Tür Niteleyicileri C de const ve volatile olmak üzere iki tür niteleyicisi vardır. const Niteleyicisi const niteleyicisi, ilkdeğer atandıktan sonra nesnenin içeriğinin değiştirilemeyeceğini anlatır. const niteleyicisi yerel, global değişkenlerle ve işlevlerin parametre değişkenleriyle birlikte kullanılabilir. const anahtar sözcüğü ile tanımlanan bir nesneye atama işleci ile atama yapılması geçersizdir: Programlama Dilleri 1 22

const Niteleyicisi const niteleyicisinin kullanım amacı nedir? Kullanıldığı yere göre const niteleyicisi aşağıdaki faydaları sağlayabilir: 1. Programın okunabilirliğini artırır. Bu yönüyle kodu okuyana yardımcı olur. 2. Yanlışlıkla nesnenin değerinin değiştirilmesi engellenir. const bir nesnenin değer atama yoluyla değiştirilmesi durumunda, derleme zamanında hata oluşur. 3. const anahtar sözcüğü ile tanımlanan nesneler, derleyici tarafından salt okunan bellekte saklanabilirler. Derleyici const nesnenin değerinin değiştirilmeyeceğini bilmediğinden, bu nesnelerin kullanıldığı ifadeler için ek eniyileme (optimizasyon) işlemleri uygulayabilir. Programlama Dilleri 1 23

volatile Niteleyicisi Derleyiciler eniyileme amacıyla nesneleri geçici olarak yazmaçlarda tutabilir. Yazmaçlardaki bu çeşit geçici barınmalar, yazmaç belirleyicisi kullanılmasa da derleyiciler tarafından yapılabilir. Örneğin: Yukarıdaki işlevde b geçici bir değişkendir, dolayısıyla derleyici b değişkenini bellekte bir yerde saklayacağına, geçici olarak yazmaçlarından birinde saklasa da işlevsel bir farklılık ortaya çıkmaz. Programlama Dilleri 1 24

volatile Niteleyicisi volatile Değişkenleri eniyileme amacıyla yazmaçlarda bekletme, onları bellekteki gerçek yerlerinde kullan!" anlamına gelen bir tür niteleyicisidir. Bu anlamıyla volatile niteleyicisini register belirleyicisi ile zıt anlamlı olarak düşünebiliriz. Yukarıdaki örnekte b değişkenini volatile olarak bildirerek anlatılan problemin çıkması engellenebilir. int a; volatile int b; volatile çok özel uygulamalarda kullanılabilen bir niteleyicidir. Programlama Dilleri 1 25

Belirleyici ve Niteleyiciler Belirleyici Global Değişken auto static Yerel Değişken register extern volatile const Parametre Değişkeni Programlama Dilleri 1 26