Hexadecimal sayi sistemi
Token: Kaynak kod derleyici acisindan anlamli en kucuk birimlere ayrilir buna token denir.
anahtar sozcukler isim olarak kullanilamaz.
10 luk sayi sistemi 16 lik ve 8 lik sayi sistemini burda bu sekilde gosteririz.
local taraftaki degiskenler otomatik omurlu oldugu icin garbage value alir ama globalde baslasaydi direk sifir degeri ile baslayacakti.
Statik omurlu degiskenle e eger bir deger atanmadiysa direk sifir ile baslar.
Global degiskenler statik omurlu oldugu icin direk sifir degeri ile baslarlar
Statik ifadelere deger vermek istiyorsan sabit ifade vebilirsin
bu olmaz
Burda isim arama biter ama isim fonksiyon oldugundan syntax hatasi verir
C++ da :: scope resolution ile globelde nesne aramasi yapilabilir. Yani + 10 dur ama de globaldeki tanimlamayi ilk 45 tanimlamasi maskeler bu nedenle C de x degeri 45 tir. Yerel isim global ismi maskeler yani ayni bracelt icinde olmali maskeleme olabilmesi icin.
Fonksiyonun geri donus degeri buradan belirtilir int olabilir double olabilir ne belirlersen o.
bu syntax hatasi
bu dogru


eger fonksiyonun geri donus degerini belirtmezsen eski C programlama modeline gore orda fonksiyonun geri donus degeri int olarak var sayilirdi ve buna implicint int denirdi.
Eski konulara ornek:
Burda hata var mi
var x degerinin degeri ayni scope da iki kez tanimlanmis yani birden fazla varliga verilmis bu sekilde olmaz.
fonksiyon bittikten sonra a degiskenin isi de sonlanir deger tutmaz yani her fonksiyon cagrildiginda yazilan deger 10 olur.

onceden belirlenmis dilin kurallarinca saptanmis bir syntax i var, bu syntax geregi en azindan bir keyworde sahip olan ve run time da programin akis yonunu degistirebilen deyimlere kontrol deyimi denir
return deyiminin iki farkli kullanim bicimi var biri cok sik biri az kullanilir.
bu ifadesiz return ifadeydi.
Simdi ifadeli return ifadesi
Eger bir fonksiyonun degeri sadece bir kere kullanilacajsa baska bir degiskende saklanmamalidir sebebi cirkin, garip gorunur.
Burda X degerinin degeri her zaman 23 dur. Fonksiyon cagrilari call by value dur x degiskenin kendi degerine erismez.
Bir fonksiyon baska bir fonksiyonun yerel degiskenine ancak o diger fonksiyonun adresi belirtilirse gerceklestirilebilir.
Referans sembolunu kullandigimiz anda fonksiyon cagrisi call by reference olur bu neden le x in degeri degisir.
Referans almasaydik o atana degiskeni fonksiyona yazma imkanimiz olmayacakti.
burda const char *p bir pointer degisken ama geri kalan , ... variedik bir degiskendir.
bu degisken ler decimal oktan ve hexadecimal seklinde yazilmistir.
derleyiciye gore o zaman int turu degil cunku benim derleyicimde int 2 byte ama baskasinda 4 byte olabilir. O nedenle bu duruma implimentation defined diyebiliriz.
Sadece tek kural unsigned int olabilmesi icin yine int eger sinirinda kalmasi lazim ama bir de sonunda U olmasi gerekiyor.
bu sekilde ters bolulu yazarsan bu deger derleyicix ile yazilirsa hexadecimal ifade olarak degerleri alir x yoksa oktan deger olarak alir, bu nedenle integer degeri decimal cinsinden farklidir.
bosluk ascii de 32 degerini verir char olarak bunu derleyici aldigi icin
bu syntax hatasi
bu dogru
eger fonksiyonun geri donus degerini belirtmezsen eski C programlama modeline gore orda fonksiyonun geri donus degeri int olarak var sayilirdi ve buna implicint int denirdi.
Eger gercekten geridonus degeri kullanilmak istenmiyorsa function un onune void konulmali.
Burda hata var mi
var x degerinin degeri ayni scope da iki kez tanimlanmis yani birden fazla varliga verilmis bu sekilde olmaz.
fonksiyon bittikten sonra a degiskenin isi de sonlanir deger tutmaz yani her fonksiyon cagrildiginda yazilan deger 10 olur.
bunun sebebi degisken local de oldugu icin automatik omurlu degiskendir bu nedenle her fonksiyon basladiginda yeniden degerin uzerine yazilir. ama statik degisken oldugunda degiskenin uzerine yazilmaz hafizada tutulur.
Fonksiyon icinde fonksiyon tanimlayamazsin, bu kod hatali.
Butun fonksiyonlar global alanda ayri ayri tanimlanir.
Butun fonksiyonlar global alanda ayri ayri tanimlanir.
Fonksiyon icinde baska fonksiyon cagirabilirsin.
Fonksiyon disinda fonksiyon cagrilmaz.
Fonksiyonlarin geri donus degeri uretmesi ve return deyimi
Return statement
hatirlatma
ifade degimi
ifade degimi
bos deyim
control deyimi
onceden belirlenmis dilin kurallarinca saptanmis bir syntax i var, bu syntax geregi en azindan bir keyworde sahip olan ve run time da programin akis yonunu degistirebilen deyimlere kontrol deyimi denir
bu ifadesiz return ifadeydi.
Simdi ifadeli return ifadesi
bir programin icinde bir cok return ifadesi olabilir. Bunlar genelde control statement ile kullanilir.

sayinin kac basamakli oldugunu hesaplar
program calisirsa bu yazilim da sifir degeri donucek yani true olacak diger turlu kosulda false yani main fonksiyonu return 1 donecek.
Geri donus degerleri isletim sistemine gider. Bash ile programi yurutup bash ile bu ciktiyi gorerek programin isni yapip yapamadigini anlariz.

C99 da eger main fonksiyonuna return yazmazsan hata gelmez. Cunku deleyici otomatikmen kendi fonksiyonun icine ' return 0; ' yazar.
printf int dondurur ama harf yazar
1) Define a Function
ama C dilinde hata degildir. Garbage value ortaya cikar. Bu fonksiyonu kullanmak undefined behavior a sebebiyet verir.
program calisirsa bu yazilim da sifir degeri donucek yani true olacak diger turlu kosulda false yani main fonksiyonu return 1 donecek.
Geri donus degerleri isletim sistemine gider. Bash ile programi yurutup bash ile bu ciktiyi gorerek programin isni yapip yapamadigini anlariz.
Boyke bir fonksiyonda ne eksik?
functionun icine void yazmak her zaman daha iyidir ve fonksiyonlar her zaman bir deger dondururler o nedenle return deyimini kullanmak gerekir.
functionun icine void yazmak her zaman daha iyidir ve fonksiyonlar her zaman bir deger dondururler o nedenle return deyimini kullanmak gerekir.
C99 da eger main fonksiyonuna return yazmazsan hata gelmez. Cunku deleyici otomatikmen kendi fonksiyonun icine ' return 0; ' yazar.
4) integer fonksiyonun kullanildigi yontem normalde o bir fonksiyondur ama geri donusdegeri eger senin ihtiyacin varsa kullanabilecegin bir bilgidir.
printf int dondurur ama harf yazar
Funtion Call
2)Fuction Definition
3) Funtion Call
4) Function Declaration
Fonksiyonu cagirmak demek o fonksiyonu calistirmak demek.

Tanimlanan degisken kadar arguman gonderilmeli.
Burdaki max3 gecerlidir ama logic hata vardir. Boyle bu kullanim olmussa;
birinci programci fonksiyonun amacini anlamamistir,
ikincisi geri donus degerini kullanmayi unutmustur.
Fonksiyonun geri donus degeri bir degiskende sakalanarak genellikle geri donus degeri kullanilir.
Yada bu bir atama olabilir.
Neden bir fonksiyonun geri donus degerini bir degiskende sakliyoruz.
Fonksiyonu cagirmak demek o fonksiyonu calistirmak demek.
Mesela burda ndgit teki x degiskenine 10 atansaydi o zaman 100 yani print edilen deger 3 olarak cikardi
Tanimlanan degisken kadar arguman gonderilmeli.
basta ndigit olarak kisimda hata yok cunku tek arguman belirlenmis ve kuallanilmis ama ikici tarafta main fonksiyonunda herhangi bir arguman kullanilmamis bu nedenle program too few argument in funtion call hatasi veriyor.

syntax hatasi

syntax hatasi degil
Bu sekilde isimlandirilerek C de fonksiyonlar ayristirilabilir ve kullanilabilir.
Bu syntax hatasi olur. cunku integer bir degere void bir deger atamaya calisiyoruz.
syntax hatasi
syntax hatasi degil
C++ da ayni fonksiyon ismini kullanabilirsin yani fuction overloading yapabilirsin ama C de yapamazsin C de her fonksiyonun ismi benzersiz olmali.
Bu sekilde isimlandirilerek C de fonksiyonlar ayristirilabilir ve kullanilabilir.
goruldugu gibi hata var.
default argument (varsayilan arguman)
Bu fonksiyonin geri donusumu void oldugundan yeni bir geri donusu olmadigindan statement olarak kullanilir.
Bu syntax hatasi olur. cunku integer bir degere void bir deger atamaya calisiyoruz.
Eger geri donus degeri olan bir fonksiyonu kallnirken ger donug degeri belirtilmezse integer bool gibi bu o fonksiyonu discarde etmek olur. Herhangi bir syntax hatasi degildir. Eger geri donus degeri varsa yani sadece bir bildirim degilse logic hata vardir. Logic hata olsa yada olmasa yine de legaldir.
birinci programci fonksiyonun amacini anlamamistir,
ikincisi geri donus degerini kullanmayi unutmustur.
Fonksiyonun geri donus degeri bir degiskende sakalanarak genellikle geri donus degeri kullanilir.
1. Fonksiyon cagri ifadesi ile bir degiskene ilk deger vermek to initialize variable with a function call expression
2. Ya da fonksiyonun geri donus degerini bir degiskene atamak to assign return a value of the function
Yada bu bir atama olabilir.
Neden bir fonksiyonun geri donus degerini bir degiskende sakliyoruz.
Ayni fonksiyonu degiskensiz farkli yerlerde yazarsam kafa karisikligina sebebiyet verebilir o nedenle degiskende saklamayi tercih ederiz. Cunku normalde fonksiyon tekrar tekrar yazilmaz degiskende saklanir.
Bos yere kaynak kaybi yasanir zaten hesaplanbir fonksiyonu tekrara tekrar hesaplatmak programin kapladigi alani arttirir.
b) bazen degeri hesapladigin yer ile kullanacagin yer farklkidir.
Eger bir fonksiyonun degeri sadece bir kere kullanilacajsa baska bir degiskende saklanmamalidir sebebi cirkin, garip gorunur.
Cok fazla degisken kulsan yanlislikla daha onceden kullandigin bir degiskeni kullanabilirsi ve bu hataya sebep olur.
scope leakage a sebep olabilir. Bir ismi kullanilmadigi yerlerde de kullanabilirsin orda kullanmaman gerekiyordur. Kapsadigi yerde bunu yaparsan syntax hatasi vermez ve yanlis yerde yanlis degisken kullanmis olursun.
bunu yerine
x*y bir ifadedir a*b de ornegin baska bir ifadedir.
x*y > a*b bir alt ifadedir. Main Expression ' dir. Digerlerine ise Subs expression denir.
x*y > a*b bir alt ifadedir. Main Expression ' dir. Digerlerine ise Subs expression denir.
x*y > a*b asgidaki fonksiyonlara bakiniz:
double sin(double);
double cos(double):
if(sin(a) + cos(b ) > sqrt(x))
++cnt;
if(sin(a) + cos(b ) > sqrt(x))
++cnt;
C de butun fonksiyon cagrilari call by value dur.
Burda X degerinin degeri her zaman 23 dur. Fonksiyon cagrilari call by value dur x degiskenin kendi degerine erismez.
Bir fonksiyon baska bir fonksiyonun yerel degiskenine ancak o diger fonksiyonun adresi belirtilirse gerceklestirilebilir.
Referans sembolunu kullandigimiz anda fonksiyon cagrisi call by reference olur bu neden le x in degeri degisir.
Referans almasaydik o atana degiskeni fonksiyona yazma imkanimiz olmayacakti.
burda const char *p bir pointer degisken ama geri kalan , ... variedik bir degiskendir.
bu 3 noktali tokenin yani karakterin yani atomun adina elipsis denir ... . Variedik fonksiyon olabilmesi icin son parametre degiskeni elipsis olmasi gerekiyor.
printf in en sonundaki f formated output function i sembolize eder.
Burda printf e bir argumanla cagri yapabiliriz sadece.
syntax hatasi
tam sayi sabitleri ve gercek sayi sabitleri olarak ikiye ayrilir.

Burda printf e bir argumanla cagri yapabiliriz sadece.
syntax hatasi
syntax hatasi yok.
tam sayi sabitleri ve gercek sayi sabitleri olarak ikiye ayrilir.
bu degisken ler decimal oktan ve hexadecimal seklinde yazilmistir.
Compiler extantion, derleyici eklentisi
derleyiciye gore o zaman int turu degil cunku benim derleyicimde int 2 byte ama baskasinda 4 byte olabilir. O nedenle bu duruma implimentation defined diyebiliriz.
hexadeceimal sekilde yazilmis olmasi burda int olarak tanimlamayacagimiz anlamina gelmiyor cunku 2 byte lik int sinirini gecmiyor.
Oktanda da yine bu ayni
Oktanda da yine bu ayni
Sadece tek kural unsigned int olabilmesi icin yine int eger sinirinda kalmasi lazim ama bir de sonunda U olmasi gerekiyor.
bu da unsigned long long
Control caracteri ilk 32 karakter ve 127 sayisidir yani toplamda 33 karakter vardir.
Bir karakterin anlami disinda baska bir anlamda kullanilmasina escape denir.
3 farkli escape sequence var
diger son iki kensini verir yani cift tirnek ve ters bolu
3 farkli escape sequence var
diger son iki kensini verir yani cift tirnek ve ters bolu
bu sekilde ters bolulu yazarsan bu deger derleyicix ile yazilirsa hexadecimal ifade olarak degerleri alir x yoksa oktan deger olarak alir, bu nedenle integer degeri decimal cinsinden farklidir.
bosluk ascii de 32 degerini verir char olarak bunu derleyici aldigi icin
Hiç yorum yok:
Yorum Gönder