C Dili Tarihçesi
C Dili 1970’li yılların başında AT & T BELL Laboratuvarlarında Dennis Ritchie tarafından yazılmıştır.
C gelişiminin arkasındaki temel fikir UNIX İşletim Sistemini geliştirmektir. 1970’lerde sadece BELL LABS’da kullanıldı ve daha sonra programcılar kendi programları için C dilini kullanmaya başladılar ve bu nedenle 1983’te AMERICAN ULUSAL STANDARTLARI ENSTİTÜSÜ (ANSI), için C için bir standart oluşturdu. O zamandan sonra C mevcut dillerin (ALGOL, PL / I, vb.) yerini başladı.
Bu hikayenin tamamı Ortak Programlama Dili (CPL) ile başladı. Cambridge Üniversitesi’ndeki Martin Richards, CPL’yi ‘Basic Programming Language(BCPL)’ye dönüştürdü.
Daha sonra BELL LABS’da Ken Thompson, BCPL’nin izlediği bir dil yazdı ve B olarak adlandırdı. C, B’nin bir halefi olarak C olarak adlandırılır. C dili BCPL ve B dilinin deyimlerinin çoğunu içermektedir.
Neden C Dilini Bilmek Gerekir
Günümüzde dünyada çeşitli amaçlarla bir çok programlama dili kullanılmaktadır. Bunlarda bazılarını C++, Java, Swift, PHP, Basic, Python, Go, C# olarak örnekleri uzatabiliriz.Bunların hepsi C’nin orta seviyede olduğu yüksek seviyeli dillerdir.
C dili ne Assembly kadar düşük, ne de yukarıdaki diller kadar yüksek seviyeli bir dildir. C donanıma daha yakın programlama dillerinden biridir. Bu yüzden orta seviyeli dil olarak gruplanır.
Java, C++ vb. diller kalıtım olarak C dili temel almıştır. Unix işletim sistemi C ile geliştirilmiştir.
C küçük bir dildir. çünkü C sadece 32 anahtar kelimeye sahiptir ve 20 tanesi ortak kullanımlıdır. Bu nedenle, başka herhangi bir yüksek seviyeli dil ile karşılaştırıldığında, C öğrenme daha kolaydır.
Çoğunlukla C dili üst seviyeli programlama dillerinin yanında ikinci dil olarak öğrenilir.
C 1983 yılından beri programcılar tarafından kullanılır. C ile yazılmış çok sayıda program bulmak mümkündür.
C Dilinin Yapısı
Bu yazıda C programlama dilinin temel yapısı hakkında bilgi sahibi olacaksınız.
Belgeleme: Bu bölüm yorumlar, program tanımı ve program yazarı hakkındaki bilgilerden ve sonra referans verilebilecek bilgilerden oluşur.
Kütüphaneler: Programda kullanılan C kütüphanelerinin ve fonksiyonlarının tanımlandığı bölümdür.
Tanımlama: Sabitlerin tanımlandığı bölümdür.
Global Bildirim: Program içinde global olarak kullanılacak fonksiyonların ve değişkenler tanımlanır.
main( ) { }: Programın çalıştırıldığı ana bölümüdür. Her C programı main metodu içinden başlar. Programda en az bir tane main metodu bulunmalıdır.
Kullanıcı Tanımlı Fonksiyonlar: Kullanıcıların tanımladığı metodları ifade eder.
Örnek:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/** * file: daire.c * author: Ali Bak * date: 2000-01-25 * description: Program dairenin alanını hesaplamak için kullanılır. * Kullanıcıdan r değeri alınır ve daire alanı hesaplanır. */ #include <stdio.h> #define PI 3.1416; float alan(float r); int main(void) { float r = 10; printf("Alan: %.2f", alan(r)); return 0; } float alan(float r) { return PI * r * r; } |
Yukarıda tanımlanan blokları yazalım
Belgeleme:
1 2 3 4 5 6 7 8 9 |
/** * file: daire.c * author: Ali Bak * date: 2000-01-25 * description: Program dairenin alanını hesaplamak için kullanılır. * Kullanıcıdan r değeri alınır ve daire alanı hesaplanır. */ |
Kütüphaneler:
1 2 3 |
#include <stdio.h> |
Tanımlama:
1 2 3 |
#define PI 3.1416; |
Global Tanımlama:
1 2 3 |
float alan(float r); |
main Fonksiyonu:
1 2 3 4 5 6 7 8 |
int main(void) { float r = 10; printf("Alan: %.2f", alan(r)); return 0; } |
Kullanıcı Tanımlı Fonksiyon:
1 2 3 4 5 6 |
float alan(float r) { return PI * r * r; } |
İlk C Programı – Merhaba Dünya
Bir önceki yazıda her C programının bir main metodu ile başladığını ifade etmiştik. Bununla birlikte derleyiciye ekrana çıktı almak için standart kütüphanesini kullandığımızı da ifade ederek aşağıdaki C kodumuzu yazıyoruz.
1 2 3 4 5 6 7 |
#include<stdio.h> main() { printf("Merhaba Dünya"); } |
…devam ediyor…
C Dili Yazım Kuralı
Belirteçler
Bir C programı çeşitli belirteçlerden oluşmaktadır. Bunlar anahtar kelime, bir tanımlayıcı, sabit, dize veya özel bir sembol olabilir.
Örneğin aşağıdaki C programında 5 tane belirteç mevcuttur. Mevcut kodun çalışması için de hepsini yazmak gereklidir.
1 2 3 |
printf("algoritmaornekleri.com\n"); |
Belirteçlere satır satır bakalım.
1 2 3 4 5 6 7 |
printf ( "www.algoritmaornekleri.com\n" ) ; |
Noktalı Virgül
Her C ifadesini bitirmek için noktalı virgül kullanılması gerekir. İfade yazıldıktan sonra noktalı virgül sembolü ile sonlandırılır.
Aşağıda iki ayrı ifadeyi sonlardırmak için sonlarına noktalı virgül konulmuştur.
1 2 3 4 |
printf("www.algoritmaornekleri.com\n"); printf("merhaba"); |
Yorumlar
Yazdığımız kodlarda bazen açıklamalar yapma ihtiyacımız olabilir. C dilinde birden fazla satırda yorum yapmak için /* ….*/ sembolleri ve tek satırda yorum yapmak için // sembolleri kullanılır.
1 2 3 4 5 6 7 8 |
/* Bu açıklama kısmı birden fazla satırdan oluşmaktadır. */ //tek satırdan oluşan yorum yapmak için bu sembol kullanır. |
Tanımlayıcılar
Her programlama dilinde olduğu gibi C dilinin de kendisine özel ifadeleri vardır. Bu ifadeler C içinde rezerve edildiği için program içinde kullanılmazlar. Daha önceki yazılarda 32 tane C diline ait özel ifadenin olduğunu yazmıştım.
İşte C diline ait özel ifadelerin listesi
C Dili Anahtar Kelimeleri | |||
---|---|---|---|
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
int | long | register | return |
short | signed | sizeof | static |
struct | switch | typedef | union |
unsigned | void | volatile | while |
C Dilinde Beyaz Boşluk
Bir çok programlama dilinde whitespace olarak ifade edilir. Sadece bir boşluk içeren, muhtemelen bir yorum içeren bir satır boş satır olarak bilinir ve bir C derleyicisi bunu tamamen yok sayar.
Ayrıca boşluk, bir ifadenin bir bölümünü diğerinden ayırır ve derleyicinin, int, bit ve sonraki öğe gibi bir ifadedeki bir öğenin nerede başladığını tanımlamasını sağlar.
1 2 3 4 5 6 7 |
int isim; int isim = "Murat"; toplam = sayi1 + sayi2; //iki sayinin toplamını ifade etmektedir. |
C Dilindeki Anahtar Kelimelerin Listesi
Bu C dersinde, C dilinde bulunan tüm anahtar kelimelerin (toplam 32 anahtar kelime) kullanımı ile bilgiler sağlamaktadır.
C Dilinde Kullanılan Anahtar Kelimeler
Aşağıdaki liste C dilinde rezerve edilmiş olan tüm anahtar kelimelerin listesini içermektedir.
C Dilindeki Anahtar Kelimeler | |||
---|---|---|---|
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
int | long | register | return |
short | signed | sizeof | static |
struct | switch | typedef | union |
unsigned | void | volatile | while |
C Dilindeki Anahtar Kelimelerin Tanımları
auto
Otomatik tanımlanan değişkenleri belirtmek için bildirilir. Fonksiyon gövdesinde yerel bir değişken oluşturup, kullanmak için vardır. Fakat C dilinde neredeyse bütün değişkenler yerel olduğu düşünülürse çok fazla kullanım alanı yoktur.
1 2 3 |
auto int degisken; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
int main() { yaz(); return 0; } void yaz() { auto int sayi=10; printf("%d",sayi); } |
Yukarıdaki fonksiyon her çalıştırıldığında değişken yeniden oluşturulmaktadır. Normalde de yeniden oluşturulmaktadır.
break ve continue
break: programı döngü deyiminden dışarı atmak için kullanılır.
continue: kendinden sonraki kodları atlayarak döngü deyiminden devam etmesi için kullanılır.
1 2 3 4 5 6 7 8 9 10 11 |
for (int i=1;i<=20;++i) { if (i==2) continue; if (i==10) break; printf("%d ",i); } |
Yukarıdaki kod içinde i=2 olduğunda continue çalıştığı yerden program atlıyor. i=10 olduğunda da program döngüden çıkıyor.
switch, case ve default
Switch ve case deyimi, birçok blok arasında bir ifade bloğu yürütülmesi gerektiğinde kullanılır.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
switch(ifade) { case '1': //ifade 1 oldığunda çalıştırılacak olan bölüm break; case '3': //ifade 3 oluğunda çalıştırılacak bölüm break; default: //ifade yukarıdakilerden biri ile eşleşmez ise çalıştırılacak bölüm } |
char
Karakter türünde değişken oluşturmak için kullanılan anahtar kelimedir.
Not: C dilinde string türü olmadğı için karakterlerden oluşan dizi ile string tanımlaması yapılmaktadır.
1 2 3 4 5 |
char d1='B'; char d2[]="Merhaba algoritmaornekleri.com"; |
const
C dilinde sabit tanımlaması yapmak için kullanılan anahtar kelimedir.
1 2 3 |
const int a = 5; |
do…while
do … while döngü deyimidir.
1 2 3 4 5 6 7 8 9 |
int i; do { print("%d ",i); i++; } while (i<10) |
double ve float
Ondalıklı sayı oluşturmak için kullanılan anahtar kelimelerdir. float 32bit yer kaplarken double 64bit yer kaplamaktadır.
1 2 3 4 |
float sayi; double dahaBuyukSayi; |
if … else
Koşul deyimleri oluşturmak için kullanılan anahtar kelimedir. else ifadesi her zaman kullanılmak zorunda değildir.
1 2 3 4 5 6 |
if (i >0 ) printf("i pozitiftir."); else printf("i pozitif degildir."); |
enum
Numaralandırılmış yapılar oluşturmak için kullanılır. Tanımladığımız bir bloğu numaralandırarak kullanma imkanı verir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
enum seviye{kolay, orta, zor}; int main() { enum seviye durum; durum = orta; //durum =2 oldu switch(durum) { case 1: printf("Durumu Kolay Olarak Secildi."); break; case 2: printf("Durumu Orta Olarak Secildi."); break; case 3: printf("Durumu Zor Olarak Secildi."); break; default: printf("Durumu Bilinmiyor."); } return 0; } |
extern
Extern anahtar sözcüğü, bir değişken veya bir fonksiyonun, bildirilen dosyanın dışında harici bir bağlantı olduğunu bildirir.
for
Döngü deyimi oluşturmak için kullanılır.
1 2 3 4 5 6 |
for (i=0; i<20 ;++i) { printf("%d ",i); } |
goto
goto anahtar kelimesi, bir fonksiyon içindeki etiketli bir ifadeye koşulsuz olarak atlama için kullanılır.
1 2 3 4 5 6 7 8 9 10 |
printf("yazilim \n"); goto son; for(int i=1; i<5; ++i) { printf("deneme"); } son:printf("program bitti"); |
int
Tam sayı türünde değişken oluşturmak için kullanılır.
1 2 3 |
int sayac; |
short, long, signed ve unsigned
int türünde kısa, uzun, işaretli(negatif) ve işaretsiz değişkenler oluşturmak için kullanılır.
1 2 3 4 5 6 |
short int kucukInt; long int buyukInt; signed int normalInt; unsigned int pozitifInt; |
Veri Türü | Aralık |
---|---|
short int | -32768 to 32767 |
long int | -2147483648 to 214743648 |
signed int | -32768 to 32767 |
unsigned int | 0 to 65535 |
return
Fonksiyonu sonlandırıp değer döndürmek için kullanılır.
1 2 3 4 5 6 7 |
int fonk() { int a = 5; return a; } |
sizeof
Değişkenin yada veri türünün büyüklüğünü hesaplar.
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> char yazi[]="algoritmaornekleri.com"; int main() { printf("%u byte.",sizeof(yazi)); //19 byte yazar } |
register
Belleğin register oluşturmak için kullanılır. Bu şekilde oluşturulduğunda değişken ile ilgili bellek yönetimini kendimizin yapacağını ifade etmiş oluruz. Böylelikle değişkenin daha hızlı çalışacağı umut edilir.
Kişisel not: C dilinin çok eski bir dil olduğu düşünülürse kullandığımız derleyiciler register değişken için ne kadar izin verir bilmiyorum.
1 2 3 |
register int degisken; |
static
Deyimlerin içinde statik değişkenler oluşturmak için kullanılır. Fonksyion sonuna kadar değişken aynı değeri korumaktadır. Not: static yerel , const genel tanımlanır.
1 2 3 |
static int degisken; |
struct
Yapı anahtar sözcüğü bir yapıyı bildirmek için kullanılır. Bir yapı tek bir isim altında farklı tiplerdeki değişkenleri tutabilir.
1 2 3 4 5 6 |
struct ogrenci{ char ad[80]; int yas; }ogr1, ogr2; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <stdio.h> #include <string.h> struct Kitap { char baslik[50]; char yazar[50]; int sira; }; int main( ) { struct Kitap k1; struct Kitap k2; strcpy( k1.baslik, "Bir Kitap"); strcpy( k1.yazar, "Ali Al"); k1.sira = 1254; strcpy( k2.baslik, "Baska Bir Kitap"); strcpy( k2.yazar, "Veli Bak"); k2.sira = 5241; printf( "Kitap 1 baslik : %s\n", k1.baslik); printf( "Kitap 1 yazar : %s\n", k1.yazar); printf( "Kitap 1 sira : %d\n", k1.sira); printf("\n"); printf( "Kitap 2 baslik : %s\n", k2.baslik); printf( "Kitap 2 yazar : %s\n", k2.yazar); printf( "Kitap 2 sira : %d\n", k2.sira); return 0; } |
typedef
Typedef anahtar sözcüğü, bir tanımlayıcı ile bir türü açıkça ilişkilendirmek için kullanılır.
1 2 3 4 |
typedef float kg; kg araba1, araba2; |
union
Bir union, tek bir isim altında farklı değişken türlerini gruplamak için kullanılır.
1 2 3 4 5 6 7 |
union ogrenci { char ad[80]; int yas; } |
void
Bir fonksiyonun geriye dönüş değerinin olmadığını ifade etmek için kullanılır.
1 2 3 4 5 6 |
void ornekFonk(int a) { ..... } |
C Aritmetik Operatör İşlemleri
C programlama dilinde aritmetik operatörün kullanımı ile ilgili basit örnekler. C dilinde kullanılan topla, çıkarma, bölme, çarpma, mod alma, arttırma ve azaltma operatörleri ile ilgili basit örnekler.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <stdio.h> #include <locale.h> int main() { char *locale; locale = setlocale(LC_ALL, ""); int a=25,b=5,c=10,d=4; int sonuc; sonuc = a+b; printf("\n Toplam sonucu: %d",sonuc); sonuc = a-b; printf("\n Çıkarma sonucu: %d",sonuc); sonuc = a*b; printf("\n Çarpma sonucu:%d",sonuc); sonuc = a/b; printf("\n Bölme sonuc: %d",sonuc); sonuc = a%b; printf("\n Kalan Bulma: %d",sonuc); sonuc = a+b*c/d; printf("\n İşlem Öncelikli Hesaplama (a+b*c/d): %d",sonuc); sonuc = a+b-c*d; printf("\n İşlem Öncelikli Hesaplama (a+b-c*d): %d",sonuc); sonuc = ++a + b++ /d; printf("\n Artırma operatörü ve İşlem önceliği (++a + b++ / d): %d",sonuc); sonuc = --a + b-- /d; printf("\n Artırma operatörü ve İşlem önceliği (--a + b-- / d): %d",sonuc); return 0; } |
C Dilinde Veri Tipleri
C programlama dilinde veri tipleri, değişkenleri tanımlamak yada fonksiyonların tiplarini tanımlamak için kullanılır. Bir değişken bellekte ne kadar yer tutacağını veri tipi ile belirler.
C programlama dilinde veri tipleri aşağıdaki gibi sınıflandırabilir.
Tip | Tanımı |
---|---|
Temel Tipler | Ondalıklı ve tam sayı olarak sınıflandırılmış tiplerdir. |
Numaralandırılmış (Enumerated) Tipler |
İşaretlenmiş aritmetik tipler olarak ifade edilebilir. signed yada unsigned işareti ile değişkenin aralığı değiştirilebilir. |
void (boş) Tipi | Hiçbir değerin olmadığını ifade etmek için kullanılan tiptir. |
Türetilmiş Tipler | Pointer (İşaretçi) Tipi Array (Dizi ) Tipi Structure ( Yapı ) Tipi Union ( Gruplama) Tipi Function ( Fonksiyon) Tipi |
Integer Tipler
Aşağıdaki tablo tamsayı tiplerinin bellek boyutlarını ve değer aralıklarını göstermektedir.
Tip | Boyut | Değer Aralığı |
---|---|---|
char | 1 byte | -128 ile 127 yada 0 ile 255 |
unsigned char | 1 byte | 0 ile 255 |
signed char | 1 byte | -128 ile 127 |
int | 2 or 4 bytes | -32,768 ile 32,767 yada -2,147,483,648 ile 2,147,483,647 |
unsigned int | 2 or 4 bytes | 0 ile 65,535 yada 0 ile 4,294,967,295 |
short | 2 bytes | -32,768 ile 32,767 |
unsigned short | 2 bytes | 0 ile 65,535 |
long | 4 bytes | -2,147,483,648 ile 2,147,483,647 |
unsigned long | 4 bytes | 0 ile 4,294,967,295 |
Belirli bir platformdaki bir türün veya bir değişkenin tam boyutunu elde etmek için sizeof operatörünü kullanabilirsiniz. Sizeof (type) ifadeleri, nesnenin depolama boyutunu ya da bayt cinsinden yazmayı sağlar.
Aşağıda, herhangi bir makinede int türünün boyutunu almak için bir örnek verilmiştir
1 2 3 4 5 6 7 8 9 10 |
#include <stdio.h> #include <limits.h> int main() { printf("int türünün boyutu : %d \n", sizeof(int)); return 0; } |
Program çalıştırıldığında int türünün boyutu 4 olarak verecektir.
Kayan Noktalı (Floating-Point) Tipi
Daha büyük sayı değerleri ve ondalıklı sayılar için floating(kayan) veri tipleri kullanılır. Bunlar dobule ve float olarak ifade edilir. Aşağıdaki tabloda bu tiplerin bellekte kapladığı alan ve değer aralıkları verilmiştir.
Tip | Boyut | Değer Aralığı | Ondalık |
---|---|---|---|
float | 4 byte | 1.2E-38 ile 3.4E+38 | 6 ondalık basamak |
double | 8 byte | 2.3E-308 ile 1.7E+308 | 15 ondalık basamak |
long double | 10 byte | 3.4E-4932 ile 1.1E+4932 | 19 ondalık basamak |
…devam edecek…
Add Comment