Update C-OzetNotlar-Ornekler.txt
This commit is contained in:
parent
209f19779e
commit
071874ef4c
1 changed files with 139 additions and 107 deletions
|
@ -13,7 +13,7 @@
|
|||
(Notları sabit genişlikli font kullanan programlama editörleri ile açınız.)
|
||||
(Editörünüzün "Line Wrapping" özelliğini pasif hale getiriniz.)
|
||||
|
||||
Son Güncelleme: 31/03/2025 - Pazartesi
|
||||
Son Güncelleme: 08/04/2025 - Salı
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
@ -98,7 +98,7 @@
|
|||
|
||||
gibi bir işlemde aslında a, b, ve c RAM'de bulunmaktadır. Bu işlem yapılırken b ve c CPU'ya çekilir. CPU içerisindeki
|
||||
elektrik devreleri toplama işlemini yapar. Sonuç RAM'deki a'ya aktarılır. Bilgisayarın güç kaynağı kapatıldığında
|
||||
RAM'deki bilgiler silinmektedir. Bunun için bu bilgilerin daha kalıcı bir bellekte saklanması gerekir. Bu tür beleklere
|
||||
RAM'deki bilgiler silinmektedir. Bunun için bu bilgilerin daha kalıcı bir bellekte saklanması gerekir. Bu tür belleklere
|
||||
"ikinci bllekler (secondary storage device)" denilmektedir. Eskiden ikincil bellek olarak floppy disketler, CD/DVD
|
||||
ROM'lar ve hard diskler kullanılıyordu. Ancak günümüzde artık SSD (solid State Disk) denilen "flash bellekler"
|
||||
kullanılmaktadır. Genellikle bilgisayar sistemlerinde ikincil belleklerle birincil bellekler arasında bir aktarım
|
||||
|
@ -406,9 +406,9 @@
|
|||
|
||||
10101010
|
||||
|
||||
Negatif sayıları ifade edebilmek için kullanılan ikiye tümleme sisteminde en soldaki bir işaret bitidir. Bu bit 0 ise sayı
|
||||
pozitif, 1 ise negatiftir. Negatif ve pozitif sayılar birbirlerinin ikiye tümleyenidir. Örneğin bu sistemde +10 yazmak
|
||||
isteyelim. Bunu işaret bitini 0 yaparak yazabiliriz:
|
||||
Negatif sayıları ifade edebilmek için kullanılan ikiye tümleme sisteminde en soldaki bir işaret bitidir. Bu bit 0 ise
|
||||
sayı pozitif, 1 ise negatiftir. Negatif ve pozitif sayılar birbirlerinin ikiye tümleyenidir. Örneğin bu sistemde +10
|
||||
yazmak isteyelim. Bunu işaret bitini 0 yaparak yazabiliriz:
|
||||
|
||||
0 000 1010 ---> +10
|
||||
|
||||
|
@ -697,7 +697,8 @@
|
|||
476 100 111 110
|
||||
741 111 100 001
|
||||
|
||||
Benzer biçimde ikilik sistemdeki bir sayı da sağdan sola üçer bir gruplandırılarak 8'lik sisteme dönüştürülebilmektedir. Örneğin:
|
||||
Benzer biçimde ikilik sistemdeki bir sayı da sağdan sola üçer bir gruplandırılarak 8'lik sisteme dönüştürülebilmektedir.
|
||||
Örneğin:
|
||||
|
||||
1011 1011 = 273
|
||||
0111 1110 = 176
|
||||
|
@ -798,11 +799,12 @@ int main(void)
|
|||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Windows sistemlerinde Merhaba Dünya programının komut satırından derlenip çalıştırışması şöyle yapılır:
|
||||
|
||||
1) Program bir editörde yazılır ve .c uzantılı biçimde saklanır. Biz bunun "sample.c" olduğunu varsayalım.
|
||||
1) Program bir editörde yazılır ve ".c" uzantılı biçimde saklanır. Biz bunun "sample.c" olduğunu varsayalım.
|
||||
|
||||
2) Daha sonra komut satırı programı çalıştırılır ve dosayanın saklandığı dizine gidilir. Komut satırı programı olarak "cmd.exe" programını doğrudan kullanmayınız.
|
||||
Çünkü bu program gerekli "path ayarlarına" sahip değildir. Bunun yerine komut satırına geçmek için "Developer Command Prompt for VS 2022" programını kullanınız.
|
||||
Bu kısa yolu masaüstüne taşırsanız rahat edersiniz.
|
||||
2) Daha sonra komut satırı programı çalıştırılır ve dosayanın saklandığı dizine gidilir. Komut satırı programı olarak
|
||||
"cmd.exe" programını doğrudan kullanmayınız. Çünkü bu program gerekli "path ayarlarına" sahip değildir. Bunun yerine
|
||||
komut satırına geçmek için "Developer Command Prompt for VS 2022" programını kullanınız. Bu kısa yolu masaüstüne taşırsanız
|
||||
rahat edersiniz.
|
||||
|
||||
3) Microsoft'un C derleyicisi "cl.exe" isimli programdır. Bu program en basit olarak şöyle çalıştırılır:
|
||||
|
||||
|
@ -812,22 +814,23 @@ int main(void)
|
|||
|
||||
cl sample.c
|
||||
|
||||
cl.exe programı derlemeyi yaptıktan sonra zaten "linker" programını kendisi çalıştırmaktadır.
|
||||
"cl.exe" programı da derlemeyi yaptıktan sonra zaten bağlayıcıyı (linker) da kendisi çalıştırmaktadır.
|
||||
|
||||
4) Artık cl.exe derleme işlemini yapıp bağlayıcı programı da (link.exe) çalıştırdığı için çalıştırılabilir dosya oluşturulmuş olur. Tek yapacağmız şey
|
||||
çalıştırılabilir programın ismini yazarak ENTER tuluna basmaktır.
|
||||
4) Artık "cl.exe" derleme işlemini yapıp bağlayıcı programı da çalıştırdığı için çalıştırılabilir dosya oluşturulmuş
|
||||
olur. Tek yapacağmız şey çalıştırılabilir programın ismini yazarak ENTER tuluna basmaktır.
|
||||
|
||||
cl.exe derleyicisinin yalnızca derleme yapmasını ancak bağlayıcıyı çalıştırmamasını istiyorsak /c seçeneğini (switch) kullanmamız gerekir. Örneğin:
|
||||
"cl.exe" derleyicisinin yalnızca derleme yapmasını ancak bağlayıcıyı çalıştırmamasını istiyorsak "/c" seçeneğini
|
||||
(switch) kullanmamız gerekir. Örneğin:
|
||||
|
||||
cl /c sample.c
|
||||
|
||||
Şimdi artık derleyici linker programını çalıştırmayacaktır. Yalnızca .obj dosyayı oluşturacaktır. Biz istersek bağlayıcı programı da bağımsız olarka çalıştırabiliriz.
|
||||
Microsoft'un bağlayıcı programı "link.exe" isimli programdır.
|
||||
Şimdi artık derleyici linker programını çalıştırmayacaktır. Yalnızca ".obj" dosyayı oluşturacaktır. Biz istersek
|
||||
bağlayıcıyı da bağımsız olarak çalıştırabiliriz. Microsoft'un bağlayıcı programı "link.exe" isimli programdır.
|
||||
|
||||
link sample.obj
|
||||
|
||||
Baradan "sample.exe" programı elde edilecektir. cl.exe derleyicisinde çalıştırılabilir dosyanın ismini değiştirebilmek için /Fe:<dosya ismi> seçeneği
|
||||
kullanılmaktadır. Örneğin:
|
||||
Baradan "sample.exe" programı elde edilecektir. cl.exe derleyicisinde çalıştırılabilir dosyanın ismini değiştirebilmek
|
||||
için /Fe:<dosya ismi> seçeneği kullanılmaktadır. Örneğin:
|
||||
|
||||
cl /Fe:test.exe sample.c
|
||||
|
||||
|
@ -837,10 +840,11 @@ int main(void)
|
|||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Linux sistemlerinde Merhaba Dünya programının derlenerek çalıştırılması da şöyle yapılmaktadr:
|
||||
|
||||
1) Yine önce bir editörde program yazılır ve .c dosyası olarak kaydedilir. Biz kaynak dosyamıza "sample.c" ismini vermiş olalım.
|
||||
1) Yine önce bir editörde program yazılır ve ".c" dosyası olarak kaydedilir. Biz kaynak dosyamıza "sample.c" ismini
|
||||
vermiş olalım.
|
||||
|
||||
2) Komut satırından kaynak dosyanın bulunduğu dizine geçilir. gcc derleyicisi ile clang derleyicilerinin komut satırı seçenkleri tamamen aynıdır.
|
||||
Derleme işlemi için şu komut uygulanır:
|
||||
2) Komut satırından kaynak dosyanın bulunduğu dizine geçilir. gcc derleyicisi ile clang derleyicilerinin komut satırı
|
||||
seçenkleri tamamen aynıdır. Bu derleyicilerle erleme işlemi şöyle yapılır:
|
||||
|
||||
gcc <kanak dosya ismi>
|
||||
clang <kaynak dosya ismi>
|
||||
|
@ -849,19 +853,20 @@ int main(void)
|
|||
|
||||
gcc sample.c
|
||||
|
||||
gcc de tıpkı cl.exe programında olduğu gibi önce derleme işlemini yapar. Sonra bağlayıcı programı çalıştırıp çalıştırılabilen dosyayı oluşturur.
|
||||
gcc derleyicisi derlemeyi bitirip bağlayıcıyı çalıştırdıktan sonra "object dosyayı" silmektedir. Bu biçimd eoluşturualn çalıştırılabilen dosya "a.out"
|
||||
ismindedir. Bu dosyanın çalıştırılması şöyle yapılmalıdır:
|
||||
gcc de tıpkı cl.exe programında olduğu gibi önce derleme işlemini yapar. Sonra bağlayıcı programı çalıştırıp çalıştırılabilen
|
||||
dosyayı oluşturur. gcc derleyicisi derlemeyi bitirip bağlayıcıyı çalıştırdıktan sonra "object dosyayı" silmektedir.
|
||||
Bu biçimde oluşturulan çalıştırılabilen dosya "a.out" ismindedir. Bu dosyanın çalıştırılması şöyle yapılmalıdır:
|
||||
|
||||
./a.out
|
||||
|
||||
Windows sistemlerinde çalıştırılabilir dısyanın yalnızca isminin yazılması yeterlidir. Ancak UNIX/Linux ve macOS sistemlerinde ./isim biçiminde çalıştırma
|
||||
yapılır. gcc derleyicisinde çalıştırılabilir dosyaya isim vermek için "-o isim" çeneği kullanılır. Örneğin:
|
||||
Windows sistemlerinde çalıştırılabilir dosyanın yalnızca isminin yazılması yeterlidir. Ancak UNIX/Linux ve macOS sistemlerinde
|
||||
./isim biçiminde çalıştırma yapılır. gcc derleyicisinde çalıştırılabilir dosyaya isim vermek için "-o isim" çeneği
|
||||
kullanılmaktaır. Örneğin:
|
||||
|
||||
gcc -o sample sample.c
|
||||
|
||||
Burada sample.c dosyası derlenir ve sample isimli çalıştırılabilir dosya oluşturulur. Tabii istersek gcc derleyicilerinde de yalnızca derleme yapıp
|
||||
bağlayıcıyı çalıştırmayabiliriz. Bunun için "-c" seçeneği kullanılmaktadır. Örneğin:
|
||||
Burada "sample.c" dosyası derlenir ve "sample" isimli çalıştırılabilir dosya oluşturulur. Tabii istersek gcc derleyicilerinde
|
||||
de yalnızca derleme yapıp bağlayıcıyı çalıştırmayabiliriz. Bunun için "-c" seçeneği kullanılmaktadır. Örneğin:
|
||||
|
||||
gcc -c sample.c
|
||||
|
||||
|
@ -871,33 +876,41 @@ int main(void)
|
|||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Micrsoft Visual Studio IDE'sinde bir C programının derlenip çalıştırılabilmesi için tipik olarak şunlar yapılmalıdır:
|
||||
|
||||
1) Önce Visual Studio IDE'si çalıştırılır. (Kurs yapıldığı sırada kullanılan IDE Visuak Studio 2022 Community Edition biçimidedir.) IDE açlıştırıldıktan
|
||||
sonra bir giriş sayfası gözükür. Oradan "Continue without code" seçilerek ana ekrana geçilir.
|
||||
1) Önce Visual Studio IDE'si çalıştırılır. (Kurs yapıldığı sırada kullanılan IDE Visual Studio 2022 Community Edition
|
||||
biçimidedir.) IDE açlıştırıldıktan sonra bir giriş sayfası gözükür. Oradan "Continue without code" seçilerek ana ekrana
|
||||
geçilir.
|
||||
|
||||
2) Visual Studio IDE'sinde bir çalışma yapmak için bir proje yaratılmalıdır. Ancal projeler de "solution" denilen kapların içerisindedir. O halde aslında bir
|
||||
proje yaratmak için bir solution da yaratılmaktadır. Bir solution aslında birdne fazla projeyi tutan bir kap gibidir. Proje yaratmak için File/New/Project
|
||||
seçilir. Proje türü olarak "C++ Empty Project" seçilir.
|
||||
2) Visual Studio IDE'sinde bir çalışma yapmak için bir proje yaratılmalıdır. Ancal projeler de "çözüm (solution)" denilen
|
||||
kapların içerisindedir. O halde aslında bir proje yaratmak için bir çözüm de yaratılmaktadır. Bir çözüm aslında birdne
|
||||
fazla projeyi tutan bir kap gibidir. Proje yaratmak için "File/New/Project" seçilir. Proje türü olarak "C++ Empty Project"
|
||||
seçilir.
|
||||
|
||||
3) Bundan sonra Projeye bir isim verilir. Visual Studio proje bilgilerini burada ismi verilen bir dizin yaratarak onun içerisine yerleştirmektedir. "Location"
|
||||
proje dizininin hangi dizinin altında yaratılacağını belirtir. "Place solution and project in the same directory" checkbox'ı çarpılanmalıdır. Sonra proje
|
||||
yaratılır. Artık elimizde içi boş bir proje vardır. Bir proje yaratıldığında aynı zamanda bir "solution" da yaratılmış olur. Solution'ı idare etmek için
|
||||
"Solution Explorer" denilen pencereden faydalanılır.
|
||||
3) Bundan sonra projeye bir isim verilir. Visual Studio proje bilgilerini burada ismi verilen bir dizin yaratarak onun
|
||||
içerisine yerleştirmektedir. "Location" proje dizininin hangi dizinin altında yaratılacağını belirtir. "Place solution
|
||||
and project in the same directory" checkbox'ı çarpılanmalıdır. Sonra proje yaratılır. Artık elimizde içi boş bir proje
|
||||
vardır. Bir proje yaratıldığında aynı zamanda bir "çözüm (solution)" de yaratılmış olur. Çözümü idare etmek için
|
||||
"Solution Explorer" denilen pencereden faydalanılmaktadır.
|
||||
|
||||
4) Artık sıra projeye bir kaynak dosya eklemeye gelmiştir. Bu işlem Project/Add New Item menüsü ile ya da "Solution Explorer"da proje üzerinde bağlam menüsünü
|
||||
açıp Add/NEw Item seçilerek de yapılabilir. Artık karşımıza başka bir diyalog penceresi çıkacaktır. Burada "C++ File" seçilip dosya ismi "uzantısı .c olacak biçimde"
|
||||
seçilmelidir. Microsoft C++ demekle aynı zamanda C'yi kastetmektedir. Aslında cl.exe derleyicisi hem C hem de C++ derleyicisidir. Bu derleyici kaynak kodun uzantısına bakarak
|
||||
hangi dile göre derleme yapacağına karar verir. Dolayısıyla bizim kesinlikle dosya uzantısını ".c" biçiminde girmemiz gerekir.
|
||||
4) Artık sıra projeye bir kaynak dosya eklemeye gelmiştir. Bu işlem "Project/Add New Item" menüsü ile ya da "Solution
|
||||
Explorer"da proje üzerinde bağlam menüsünü açıp "Add/New Item" seçilerek de yapılabilir. Artık karşımıza başka bir
|
||||
diyalog penceresi çıkacaktır. Burada "C++ File" seçilip dosya ismi uzantısı ".c" olacak biçimde seçilmelidir. Microsoft
|
||||
C++ demekle aynı zamanda C'yi de kastetmektedir. Aslında "cl.exe" derleyicisi hem C hem de C++ derleyicisidir. Bu
|
||||
derleyici kaynak kodun uzantısına bakarak hangi dile göre derleme yapacağına karar verir. Dolayısıyla bizim kesinlikle
|
||||
dosya uzantısını ".c" biçiminde girmemiz gerekir.
|
||||
|
||||
5) Kaynak dosya projeye eklendikten sonra kod yazılır.
|
||||
5) "Kaynak dosya" projeye eklendikten sonra kod yazılır.
|
||||
|
||||
6) Build/Compile seçilirse dosya yalnızca derlenir. "Build" kavramı C/C++ dünyasında "derleme ve link işlemini" anlatmaktadır. Build/Build Solution seçilirse
|
||||
solution içerisindeki tüm projeler derlenip link edilir. Build/Build XXX seçilirse (burada XXX aktif projenin ismidir) bu durumda yalnızca aktif proje derlenerek link edilir.
|
||||
6) Build/Compile seçilirse dosya yalnızca derlenir. "Build" kavramı C/C++ dünyasında "derleme ve bağlama işlemini"
|
||||
anlatmaktadır. "Build/Build Solution" seçilirse solution içerisindeki tüm projeler derlenip link edilir. Build/Build XXX"
|
||||
seçilirse (burada XXX aktif projenin ismidir) bu durumda yalnızca aktif proje derlenerek bağlanır.
|
||||
|
||||
7) Programı çalıştırmak için Debug/Start Without Debugging seçilir. Bunun kısa yol tuşu "Ctrl + F5"tir. Zaten Ctrl+F5'e bastığımızda dosyada bir
|
||||
değişiklik varsa build işlemi yapılmaktadır. O halde aslında bizim tek yapacağımız şey Ctrl+F5 tuşlarına basmaktır.
|
||||
7) Programı çalıştırmak için "Debug/Start Without Debugging" seçilir. Bunun kısa yol tuşu "Ctrl + F5"tir. Zaten
|
||||
Ctrl+F5'e bastığımızda dosyada bir değişiklik varsa build işlemi yapılmaktadır. O halde aslında bizim tek yapacağımız
|
||||
şey Ctrl+F5 tuşlarına basmaktır.
|
||||
|
||||
Projeyi (solution'u) kapatma işlemi File/Close Solution menüsü ile yapılabilir. Bir projeyi açmanın en kolay yolu giriş ekranındaki "Open recent"
|
||||
listesinden son projelerden birini seçmektir. Dğer yolu File/Open-Project menüsünü seçip buradan solution dizininne gelip uzantısı ".sln" olan dosyayı seçmektir.
|
||||
Projeyi (ve çöüzümü) kapatma işlemi File/Close Solution menüsü ile yapılabilir. Bir projeyi açmanın en kolay yolu
|
||||
giriş ekranındaki "Open recent" listesinden son projelerden birini seçmektir. Dğer yolu "File/Open-Project" menüsünü
|
||||
seçip buradan solution dizininne gelip uzantısı ".sln" olan dosyayı seçmektir.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -906,36 +919,42 @@ int main(void)
|
|||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
C/C++ için çok tercih edilen diğer bir IDE de "Qt Creator" denieln IDE'dir. Buradaki çalışma biçimi ana hatlarıyla Visual Studio'ya benzemektedir.
|
||||
Önce yine bir proje yaratılmalıdır. Bunun için File/New File or Project menüsü seçilir. Template olarak "None Qt Project" seçilir. Buradan da "Plain C Application"
|
||||
seçilir. Projeye isim verilir ve projenin yaratılacağı dizin belirtilir. Qt Creator IDE'si bu seöenekle bir .C dosyasını projeye ekleyip onun içerisine birkaç satırlık
|
||||
"Merhaba Dünya" programını yazmaktadır. Derleme ve link işlemi ve çalıştırma işlemi tek tuşla (Ctrl+R) yapılabilir. Yine bu işlem GUI ekranındaki çalıştır düğmesine
|
||||
tıklanarak da yapılabilmektedir.
|
||||
C/C++ için çok tercih edilen diğer bir IDE de "Qt Creator" denilen IDE'dir. Buradaki çalışma biçimi ana hatlarıyla
|
||||
Visual Studio'ya benzemektedir. Önce yine bir proje yaratılmalıdır. Bunun için "File/New File or Project" menüsü
|
||||
seçilir. Açılan diyalog penceresinden template olarak "None Qt Project" seçilir. Buradan da "Plain C Application"
|
||||
seçilir. Projeye isim verilir ve projenin yaratılacağı dizin belirtilir. Qt Creator IDE'si bu seöenekle bir ".c"
|
||||
dosyasını projeye ekleyip onun içerisine birkaç satırlık "Merhaba Dünya" programını yazmaktadır. Derleme ve link
|
||||
işlemi ve çalıştırma işlemi tek tuşla (Ctrl+R) yapılabilir. Yine bu işlem GUI ekranındaki çalıştır düğmesine tıklanarak
|
||||
da yapılabilmektedir.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Kod derleyici tarafından derlenirken derleyiciler bazı sorunlar karşısında "hata mesajları" bu sorunları programcıya iletirler. Derleyicilerin verdiği
|
||||
hata mesajları üçe ayrılmaktadır:
|
||||
Kod derleyici tarafından derlenirken derleyiciler bazı sorunlar karşısında "tanı mesajları (diagnositic messages)"
|
||||
ile bu sorunları programcıya iletirler. Derleyicilerin verdiği tanı mesajları üçe ayrılmaktadır:
|
||||
|
||||
1) Uyarılar (Warnings)
|
||||
2) Gerçek Hatalar (Errors)
|
||||
2) Hatalar (Errors)
|
||||
3) Ölümcül Hatalar (Fatal Errors)
|
||||
|
||||
Uyarılar amaç kod oluşumunu engellemeyecek derecede mantıksal hatalar için verilmektedir. Yani derleyici kodu anlamlandırmakla birlike programcının yapmış
|
||||
olabileceği olası hatalara dikkat çekmek için uyarı vermektedir. Gerçek hatalar object dosyanın oluşunu engellecek derecede olan ciddi hatalardır. Genellikle
|
||||
dilin kurallarına uyulmaması yani kodun hatalı bir biçimde yazılması sonucunda oluşur. Programcının mutlaka bu tür hataları düzeltmesi gerekir.
|
||||
Ölümcül hatalar derleme işleminin bile devam ettirilmesini engelleyecek biçimde hatalardır. Normal olarak gerçek bir hata ile karşılaşıldığında tüm hataların
|
||||
topluca listelenmesi için derleme işlemine devam edilir. Ancak bir ölümcül hata ile karşılaşıldığında artık derleme işlemi bile sonlandırılır Ölümcül hatalar
|
||||
genellikle sistemdeki önemli sorunlar yüzünden ortaya çıkmaktadır. Örneğin diskin tamamen dolu olması, derleyicinin işlemine devam etmek için gereken
|
||||
RAM'in bulunmaması gibi durumlar tipik ölümcül hata gerekçeleridir.
|
||||
Uyarılar amaç kod oluşumunu engellemeyecek derecede mantıksal hatalar için verilmektedir. Yani derleyici kodu anlamlandırmakla
|
||||
birlike programcının yapmış olabileceği olası bazı mantık hatalarına dikkat çekmek için uyarı vermektedir. Hatalar
|
||||
amaç dosyanın (object file) oluşumunu engelleyecek derecede olan ciddi hatalardır. Genellikle dilin kurallarına uyulmaması
|
||||
yani kodun hatalı bir biçimde yazılması sonucunda oluşur. Programcının mutlaka bu tür hataları düzeltmesi gerekir.
|
||||
Ölümcül hatalar (fatal errors) derleme işleminin bile devam ettirilmesini engelleyecek derecede önemli hatalardır.
|
||||
Normal olarak bir hata ile karşılaşıldığında tüm tanı mesajlarının topluca listelenmesi için derleme işlemine devam
|
||||
edilir. Ancak bir ölümcül hata ile karşılaşıldığında artık derleme işlemi bile sonlandırılır. Ölümcül hatalar genellikle
|
||||
sistemdeki önemli sorunlar yüzünden ortaya çıkmaktadır. Örneğin diskin tamamen dolu olması, derleyicinin işlemine
|
||||
devam edebilmesi için gereken ana belleğin yetersiz olması gibi durumlar tipik ölümcül hata gerekçeleridir.
|
||||
|
||||
Derleyiciler genellikle hata mesajlarında hatanın kaynak kodun neresinde eolduğunu belirtirler. Pek çok derleyici hata mesajlarına içsel birer numara
|
||||
vermektedir. Bu numara yoluyla hata mesajı hakkında daha fazla bilgi elde edilebilmektedir. Hata mesajları standart mesajlar değildir. Derleyiciden derleyiciye
|
||||
hata mesajları değişebilmktedir.
|
||||
Derleyiciler genellikle tanı mesajllarında ilgili sorunun kaynak kodun neresinde eolduğunu da belirtirler. Pek çok
|
||||
derleyici hata mesajlarına içsel birer numara vermektedir. Bu numara yoluyla tanı mesajı hakkında daha fazla bilgi
|
||||
elde edilebilmektedir. Tanı mesajları standardize edilmemiştir. Derleyiciden derleyiciye tanı mesajlarının içeriği
|
||||
değişebilmktedir.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Bir programlama dilinde kendi başına anlamlı olan en küçük birime "atom (token)" denilmektedir. Örneğinaşağıdaki gibi bir C kodu olsun:
|
||||
Bir programlama dilinde kendi başına anlamlı olan en küçük birime "atom (token)" denilmektedir. Örneğin aşağıdaki gibi
|
||||
C'de yazılmış bir kod parçası olsun:
|
||||
|
||||
if (a > 10)
|
||||
x = 10;
|
||||
|
@ -960,7 +979,8 @@ int main(void)
|
|||
20
|
||||
;
|
||||
|
||||
M3rhaba Dünya programı da şöyle atomlarına ayrılabilir:
|
||||
Burada koddaki tüm öeğelerin en küçük anlamı birimlere ayrıştırıldığına dikkat ediniz. "Merhana Dünya" programı da şöyle
|
||||
atomlarına ayrılabilir:
|
||||
|
||||
#
|
||||
include
|
||||
|
@ -983,29 +1003,31 @@ int main(void)
|
|||
;
|
||||
}
|
||||
|
||||
Gerçekten de derleyiciler derlemenin ilk aşamasında kaynak kodu bu biçimde parçalara ayırmaktadır. Derlyicilerin bu işi yapan modüllerine "scanner" ya da
|
||||
"lexical analyzer" ya da "tokenizer" denilmektedir.
|
||||
Gerçekten de derleyiciler derlemenin ilk aşamasında kaynak kodu bu biçimde atomlarına ayırmaktadır. Derlyicilerin
|
||||
bu işi yapan modüllerine "scanner" ya da "lexical analyzer" ya da "tokenizer" denilmektedir.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Atomlar tipik olarak 6 gruba ayrılmaktadır:
|
||||
|
||||
1) Anahtar Sözcükler (Keywords/Reserved Words): Dil için özel anlamı olan, değişken olarak kullanılması yasaklanmış sözcüklerden oluşan atomlardır.
|
||||
Örneğin "if" gibi, "return" gibi, "int" gibi.
|
||||
1) Anahtar Sözcükler (Keywords/Reserved Words): Dil için özel anlamı olan, değişken olarak kullanılması yasaklanmış
|
||||
sözcüklerden oluşan atomlardır. Örneğin "if" gibi, "return" gibi, "int" gibi. Bu sözcükler doğrudan derleyici tarafından
|
||||
tanınmaktadır.
|
||||
|
||||
2) Değişkenler (Identifers): İsmini programcının istediği gibi verebildiği atomlardır. Örneğin bir programdaki i, count, a, b gibi atomlar tipik olarak değişken
|
||||
atomlardır. Merhaba Dümya programındaki printf ve main anahtar sözcük değildir. Değişken atom statüsündedir. Bir atomun anahtar sözcük olmaısı için derleyicinin
|
||||
onu gördüğünden değişkendne farklı bir işlem uygulaması gerekir.
|
||||
2) Değişkenler (Identifers): İsmini programcının istediği gibi verebildiği atomlardır. Örneğin bir programdaki i, count,
|
||||
a, b gibi atomlar tipik olarak değişken atomlardır. "Merhaba Dümya" programındaki printf ve main anahtar sözcük değildir.
|
||||
Değişken atom statüsündedir. Bir atomun anahtar sözcük olması için derleyicinin onu gördüğünden değişkenden farklı bir
|
||||
işlem uygulaması gerekir.
|
||||
|
||||
3) Sabitler (Literals/Constants): Bir sayı ya bir değişkenin içerisindedir ya da program içerisinde doğrudan yazılmıştır. İşte programda doğrudan
|
||||
yazılmış olan sayılara "sabit" denilmektedir. Örneğin:
|
||||
3) Sabitler (Literals): Bir sayı ya bir değişkenin içerisindedir ya da program içerisinde doğrudan kullanımıştır. İşte
|
||||
program içerisinde doğrudan yazılmış olan sayılara "sabit" denilmektedir. Örneğin:
|
||||
|
||||
a = b + 10;
|
||||
|
||||
Burada a ve b değişken atomdur, ancak 10 sabit atomdur.
|
||||
|
||||
4) Operatörler (Operators): Bir işleme yol açan ve işlem sonucunda bir değer üretilmesini sağlayan + gibi - gibi, * gibi atomlara operatör denilmektedir.
|
||||
Örneğin:
|
||||
4) Operatörler (Operators): Bir işleme yol açan ve işlem sonucunda bir değer üretilmesini sağlayan + gibi - gibi, *
|
||||
gibi atomlara operatör denilmektedir. Örneğin:
|
||||
|
||||
a = b + c * 3
|
||||
|
||||
|
@ -1019,9 +1041,11 @@ int main(void)
|
|||
* operatör
|
||||
3 sabit
|
||||
|
||||
5) Stringler (String literals): İki tırnak içerisindeki yazılar iki tırnaklarıyla birlikte tek bir atom belirtir. Bunlara "string" denilmektedir.
|
||||
5) Stringler (String literals): İki tırnak içerisindeki yazılar iki tırnaklarıyla birlikte tek bir atom belirtir.
|
||||
Bunlara "string" denilmektedir. C standartlarında string'ler de sabit atom olarak sınıflandırılmaktadır.
|
||||
|
||||
6) Ayıraçlar (Delimiters/Punctuators): Yukarıdaki grupların dışında kalan ifadeleri birbirindne ayırmak için kullanılan tüm atomlar ayıraç grubundadır.
|
||||
6) Ayıraçlar (Delimiters/Punctuators): Yukarıdaki grupların dışında kalan ifadeleri birbirinden ayırmak için kullanılan
|
||||
tüm atomlar ayıraç grubundadır.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -1039,35 +1063,40 @@ int main(void)
|
|||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Bellekte yer kaplayan ve erişilebilen bölgelere "nesne (object)" denilmektedir. Programlama dillerindeki değişkenler genellikle nesne durumundadır. Örneğin:
|
||||
Bellekte yer kaplayan ve erişilebilen bölgelere "nesne (object)" denilmektedir. Programlama dillerindeki değişkenler
|
||||
genellikle nesne durumundadır. Örneğin:
|
||||
|
||||
a = 10
|
||||
|
||||
gibi bir ifadede a bir nesne durumundadır. biz bu a ismiyle a'nın bellek bölgesine erişebilmekteyiz. Bir olgunun nesne belirtmesi için yalnızca bellekte yer kaplaması
|
||||
yetmez. Aynı zamanada "erişilebilir" olması gerekir. Örneğin sabitler de bellekte yer kaplarlar. Ancak erişilebilir olmadıkları için nesne değillerdir.
|
||||
gibi bir ifadede a bir nesne durumundadır. Biz bu a ismiyle a'nın bellek bölgesine erişebilmekteyiz. Bir olgunun
|
||||
nesne belirtmesi için yalnızca bellekte yer kaplaması yetmez. Aynı zamanada "erişilebilir" olması da gerekir.
|
||||
Örneğin sabitler de bellekte yer kaplarlar. Ancak erişilebilir olmadıkları için nesne değillerdir.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
C'de bir ifade ya nesne belirtir ya da nesne belirtmez. Nesne belirten ifadelere "sol taraf değeri (lvalue)", nesne belirtmeyen ifadelere
|
||||
"sağ taraf değeri (rvalue)" denilmektedir. Örneğin:
|
||||
C'de bir ifade ya nesne belirtir ya da nesne belirtmez. Nesne belirten ifadelere "sol taraf değeri (lvalue)", nesne
|
||||
belirtmeyen ifadelere "sağ taraf değeri (rvalue)" denilmektedir. Örneğin:
|
||||
|
||||
a ifadesi nesne belirtir. Sol taraf değeridir.
|
||||
b[i] ifadesi nesne belirtir, sol taraf değeridir.
|
||||
a + b ifadesi nesne belirtmez, sağ taraf değeridir.
|
||||
10 ifadesi nesne belirtmez, sağ taraf değeridir.
|
||||
printf("Helo World") ifadesi nesne belirtmez sağ taraf değeridir.
|
||||
printf("Helo World") ifadesi nesne belirtmez, sağ taraf değeridir.
|
||||
|
||||
Sol taraf değeri (left value) ismi tipik olarak bu tür iafadelerin atama operatörünün soluna getirilebilmesi nedeniyle verilmiştir. Sağ taraf değeri
|
||||
(right value) atama operatörünün soluna getirilemeyen ifadelere denilmektedir. Tabii bunlar tipik olarak atama operatörünün sağına getirilirler.
|
||||
Ancak atama operatörünün sağına getirilen her şey sağ taraf değeri değildir. Soluna getirilemeyenler sağ taraf değeridir.
|
||||
Sol taraf değeri (left value) ismi tipik olarak bu tür iafadelerin atama operatörünün soluna getirilebilmesi nedeniyle
|
||||
verilmiştir. Sağ taraf değeri (right value) atama operatörünün soluna getirilemeyen ifadelere denilmektedir. Tabii
|
||||
bunlar tipik olarak atama operatörünün sağına da getirilirler. Ancak atama operatörünün sağına getirilen her şey
|
||||
sağ taraf değeri değildir. Soluna getirilemeyenler sağ taraf değeridir.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Sentaks açıklamak için çeşitli "meta diller (meta languages)" oluşturulmuştur. Bunların en çok kullanılanı "BNF (BAckus Naur Form)" denilen notasyondur.
|
||||
BNF notasyonu "EBNF (Extended BNF)" biçiminde ISO tarafından standardize de edielmiştir. Gerçekten de programlama dillerinin standartları genellikle
|
||||
BNF notasyonu ile ya da onun bir türevi ile açıklanmaktadır. Ancak biz kurusumuzda "açısal parantex-köşeli parantez" tekniğini kullanacağız. Bu teknikte
|
||||
açısal parantezler içerisinde öğeler zorunlu öğeleri, köşeli parantezler içerisindeki öğeler "isteğe bağlı (optional)" öğeleri belirtmektedir. Bunların dışındaki
|
||||
tüm atomlar aynı pozisyonda bulundurulması gerekir. Örneğin if deyimi şöyle ifade edilebilir:
|
||||
Sentaks açıklamak için çeşitli "meta diller (meta languages)" oluşturulmuştur. Bunların en çok kullanılanı "BNF
|
||||
(Backus Naur Form)" denilen notasyondur. BNF notasyonu "EBNF (Extended BNF)" biçiminde ISO tarafından standardize de
|
||||
edilmiştir. Gerçekten de programlama dillerinin standartları genellikle BNF notasyonu ile ya da onun bir türevi ile
|
||||
açıklanmaktadır. Ancak biz kurusumuzda "açısal parantez-köşeli parantez" tekniğini kullanacağız. Bu teknikte açısal
|
||||
parantezler içerisinde öğeler zorunlu öğeleri, köşeli parantezler içerisindeki öğeler "isteğe bağlı (optional)" öğeleri
|
||||
belirtmektedir. Bunların dışındaki tüm atomların belirtilen konumda bulundurulması gerekir. Örneğin if deyimini
|
||||
bu teknikle şöyle ifade edilebiliriz:
|
||||
|
||||
if (<ifade>)
|
||||
<deyim>
|
||||
|
@ -1075,15 +1104,15 @@ int main(void)
|
|||
else
|
||||
<deyim>
|
||||
]
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
9. Ders 21/06/2022-Salı
|
||||
9. Ders 21/06/2022-Salı
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
Boşluk duygusu oluşturmak için kullanılan karakterlere "boşluk karakterleri (white space)" denilmektedir. Boşuk karakterli şunlardır:
|
||||
Boşluk oluşturmak için kullanılan karakterlere "boşluk karakterleri (white space)" denilmektedir. Boşuk karakterli
|
||||
şunlardır:
|
||||
|
||||
SPACE (32)
|
||||
LF (Line Feed) (10)
|
||||
|
@ -1091,15 +1120,17 @@ int main(void)
|
|||
TAB (9)
|
||||
VTAB (11)
|
||||
|
||||
TAB karakter aslında tek bir karakterdir. Bu karakteri gören editörler imleci belli bir miktarda ilerletirler. Bazı editörler biz TAB tuşuna bastığımızda
|
||||
dosyaya TAB karakter basmaz bunun yerine editörün ayarlarında belirtildiği miktarda SPACE karakteri basar. Bunun nedeni kaynak kod başka bir TAB ayarına
|
||||
ayarlanmış bir editörde açıldığında aynı biçimde gözükmesini sağlamaktır.
|
||||
TAB karakter aslında tek bir karakterdir. Bu karakteri gören editörler imleci belli bir miktarda ilerletirler. Bazı
|
||||
editörler biz TAB tuşuna bastığımızda dosyaya TAB karakter basmaz bunun yerine editörün ayarlarında belirtildiği
|
||||
miktarda SPACE karakteri basar. Bunun nedeni kaynak kod başka bir TAB ayarına ayarlanmış bir editörde açıldığında
|
||||
aynı biçimde gözükmesini sağlamaktır.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
C'nin yazıl kuralı iki madde ile özetlenebilir:
|
||||
C'nin yazım kuralı iki madde ile özetlenebilir:
|
||||
|
||||
1) #'li satırlar hariç atomlar arasında istenildiği kadar boşluk karakterleri bırakılabilir. Örneğin aşağıdaki program geçerlidir:
|
||||
1) #'li satırlar hariç atomlar arasında istenildiği kadar boşluk karakterleri bırakılabilir. Örneğin aşağıdaki program
|
||||
geçerlidir:
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -1120,15 +1151,16 @@ int main(void)
|
|||
;
|
||||
}
|
||||
|
||||
2) #'li satırlar hariç atomlar istenildiği kadar bitişik yazılabilirler. Ancak anahtar sözcüklerle değişkenler ve sabitler btişiki yazılamazlar.
|
||||
Merhaba Dünya programıını aşağıdaki gibi kompakt bir biçimde de yazabilirdik:
|
||||
2) #'li satırlar hariç atomlar istenildiği kadar bitişik yazılabilirler. Ancak anahtar sözcüklerle değişkenler ve
|
||||
sabitler btişik yazılamazlar. Merhaba Dünya programıını aşağıdaki gibi kompakt bir biçimde de yazabilirdik:
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void){printf("Hello World\n");return 0;}
|
||||
|
||||
Tabii programcının kodunu güzel gözükecek ve iyi okunabilecek biçimde yazması gerekir. C'de çeşitli yazım stilleri vardır. En yaygın kullanılan yazım stili
|
||||
Dennis Ritchie ve Brian Kernighan'ın "The C Programming Language" kitabında uyguladığı yazım biçimidir. Buna "Ritchie Kernighan Tarzı" denilmektedir.
|
||||
Tabii programcının kodunu güzel gözükecek ve iyi okunabilecek biçimde yazması gerekir. C'de çeşitli yazım stilleri
|
||||
vardır. En yaygın kullanılan yazım stili Dennis Ritchie ve Brian Kernighan'ın "The C Programming Language" kitabında
|
||||
uyguladığı yazım biçimidir. Buna "Ritchie Kernighan Tarzı" denilmektedir.
|
||||
----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------
|
||||
|
|
Loading…
Add table
Reference in a new issue