Update C-OzetNotlar-Ornekler.txt

This commit is contained in:
C ve Sistem Programcıları Derneği 2025-04-08 14:27:31 +03:00
parent 209f19779e
commit 071874ef4c

View file

@ -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ü
ı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
ı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
ı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.
----------------------------------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------------------------------------