C Programlama Dili'nde büyük ve küçük harflere farklı işlem yapılmaktadır:
Örneğin: "Fonksiyon" ve "fonksiyon" kelimeleri tamamen farklı kabul edilir.
Şimdi, en basit şekilde oluşturulmuş ilk C programımızı incelemeye çalışalım:
#include <stdio.h> /* Başlık dosyasını programa ekleme */
int main(void) /* Ana fonksiyon bildirimi */
{
printf("C Programlama Dili"); /* Ekrana bir karakter dizisi yazma */
return 0; /* Programın normal bir şekilde sona erdiğini gösterir. */
}
Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:
C Programlama Dili
İlk C programımızı çalıştırmış olduk. Programda /* karakterleri ile başlayan ve */ karakterleri ile sona eren ifadelere yorum adı verilir ve tamamen bilgi verme amaçlı olup, derleyici tarafından herhangi bir işlem yapılmaz.
Şimdi, programı satır satır incelemeye çalışalım.
#include <stdio.h>
C'de, # karakteri ile başlayan satırlar önişlemci direktifi olup, program derlenmeden önce, önişlemci tarafından işlem yapılır. Yukarıdaki satırda, kullanılan #include önişlemci direktifi, sağ tarafında yer alan <stdio.h> adlı başlık dosyasını programa dahil eder. Böylece, <stdio.h> başlık dosyası içeriği program içinde yazılmış gibi kullanılabilir hale gelir.
Bu durumda, <stdio.h> başlık dosyasını programımıza dahil ederek, printf() fonksiyonunu programımızda kullanabilme olanağına sahip oluyoruz.
int main(void)
Bir C programı çalışmaya başladığında, ilk önce program içinde mutlaka bulunması gereken main() adlı fonksiyonu arar, bulur ve ilk işlem satırından itibaren çalıştırmaya başlar. { ve } işaretleri main() fonksiyon bloğunun başlangıç ve sonunu gösterir. main() ifadesinin sol tarafında yer alan int kelimesi main() fonksiyonunun bir tamsayı değeri geri döndürmesi gerektiğini ifade eder.
C'de, main ifadesinden sonraki parentezler içindeki void ifadesi, main() fonksiyonunun bir parametreye sahip olmadığını gösterir.
printf("C Programlama Dili");
Yukarıda verilen satır main() fonksiyonu içinde ilk sırada yer alan ve "C Programlama Dili" ifadesini ekrana yazan bir işlem satırıdır.
İşlem satırı C'nin bir defada yerine getirmesi gereken işlem olarak tanımlanabilir. C'de, bütün işlem satırları noktalı virgül işareti ile sona erer. Yani işlem satırı sonu noktalı virgül (;) işareti ile belirlenir. İşlem satırı, dil bilgisinde görülen satır kavramından farklı olarak, aynı satıra birden fazla yazılabilir.
Burada, printf() fonksiyonu parantez içinde yer alan ifadeyi ekrana yazar.
return 0;
Yukarıdaki satır programın çalışmasının normal bir şekilde sona erdiğini gösteren 0 değerini kendisini çağıran ortama geri döndürür.
Şimdi, tek satırda iki işlem satırının kullanıldığı bir programı incelemeye çalışalım:
#include <stdio.h>
int main()
{
printf("C Programlama Dili"); printf(" ve fonksiyonlar");
return 0;
}
Yukarıdaki programı derleyip çalıştırdığımızda, tek satırda yer alan iki adet işlem satırını çalıştırarak aşağıdaki cümleleri ekrana yazar:
C Programlama Dili ve fonksiyonlar
* C bir satırda (;) işaretine rastladığında, bu işareti işlem satırı sonu olarak algılar.
Yukarıdaki iki adet işlem satırını tek satırda yazmakla aşağıda gösterildiği şekilde iki satır halinde yazmak arasında fark yoktur:
#include <iostream>
using namespace std;
int main()
{
printf("C Programlama Dili");
printf(" ve fonksiyonlar");
return 0;
}
Fonksiyonları tanımlanma şekilleri açısından ikiye ayırabiliriz:
Programlarımızda hazır kütüphane fonksiyonlarını kullanmak istediğimizde, kütüphaneye ait başlık dosyasını programın başında tanımladıktan sonra, sadece fonksiyon adını yazarak çağırmamız yeterlidir. Ancak kullanıcı tanımlı fonksiyonlar kullanmak istediğimizde, fonksiyonu çağırmadan önce, program içinde tanımlamamız gerekir. Şimdi, bir program içinde kullanıcı tanımlı bir fonksiyonu oluşturmanın yolunu incelemeye çalışalım. Fonksiyon, C programlama dilinde aşağıdaki gibi genel bir yapı ile ifade edilir:
dönüş-değeri fonksiyon_adı(parametre1, parametre2, ...)
{
işlem satırı;
.
.
işlem satırı;
}
Eğer fonksiyon genel yapısı main() fonksiyonundan sonra dosyaya dahil edilirse, main() fonksiyonundan önce aşağıdaki şekilde fonksiyon bildirimi yapılmalıdır.
dönüş-değeri fonksiyon_adı(parametre1, parametre2, ...); // fonksiyon bildirimi
int main(void)
{
işlem satırı:
.
.
işlem satırı;
}
dönüş-değeri fonksiyon_adı(parametre1, paramtre2, ...) // fonksiyon yapısı
{
işlem satırı;
.
.
işlem satırı;
}
Fonksiyon tanımlamalarında fonksiyon adı tanımlayabileceğimiz herhangi bir ifade olabilir. Ancak, fonksiyon adı harflerden, rakamlardan ve (_) işaretinden oluşan bir karakter dizisi olmalıdır. Fonksiyonda bir veya birden fazla işlem satırı bulunabilir.
Bir fonksiyonu yukarıda gösterildiği şekilde tanımladıktan sonra tıpkı kütüphane fonksiyonları gibi çağırabiliriz. Bir fonksiyon main() fonksiyonu veya diğer bir fonksiyon içinden adı kullanılarak çağrılabilir:
fonksiyon_adı(); // Fonksiyon çağırma için kullanılan genel yapı
fonk(); // Fonksiyon çağrı örneği
Bir fonksiyona çağrı yapmak için işlem satırına önce fonksiyon adı ve hemen peşinden de parantez açma ve kapama işaretleri yazılır. İşlem satırı ise doğal olarak noktalı virgül ile sonlandırılır:
Programın farklı yerlerinde aynı işlem satırlarını tekrar etmemniz gerektiğinde, bu işlem satırlarını bir fonksiyon içine yerleştirirsek, her defasında aynı işlem satırlarını yazmak yerine sadece fonksiyonu çağırarak sonuca ulaşmamızı sağlar.
Bir fonksiyon adı kullanılarak çağrıldığında, fonksiyonun içinde yer alan bütün işlem satırları çağrıldığı işlem satırında yazılmış gibi işlem yapılır.
C, yapısal bir programlama dili olduğundan, program yazılırken kolaylıkla anlaşılır ve kontrolü basit bir yapı elde edilir. Bu sistemi oluşturmak için programlarınıtemelini oluşturan fonksiyonlar kullanılır. Bir programda bir veya daha fazla fonksiyon bulunabilir. Ancak, bir programda kaç tane fonksiyon bulunursa bulunsun, bu fonksiyonlardan bir tanesi mutlaka main() adlı fonksiyon olmalıdır.
Yukarıda çalıştırdığımız program içinde yer alan main() fonksiyonu da diğer fonksiyonların özelliklerini içerir.
Program çalışmaya başladığında, direkt olarak main() fonksiyonuna giriş yaptığından ve ilk işlem satırından itibaren işlemleri gerçekleştirdiğinden bahsetmiştik. İşlem satırları açma yaylı parantezi ({) ile kapama yaylı parantezi (}) arasında yer alır:
int main(void)
{
işlem satırı:
.
.
işlem satırı;
}
Program, başlangıç işaretini ({) görür görmez ilk işlem satırından başlayarak, bütün işlem satırlarının gerektirdiği işlemleri yerine getirir. (}) işaretini görür görmez programın çalışmasını sona erdirir.
Program içinde main() fonksiyonu dışında fonksiyon kullanmak için, yukarıdaki programın aynısını fonksiyon kullanarak tekrar yazdığımızda, program aşağıdaki hale gelecektir:
#include <iostream>
using namespace std;
void fonk(void);
int main(void)
{
fonk();
return 0;
}
void fonk(void)
{
cout << "C Programlama Dili";
}
Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:
C Programlama Dili
Program, main() fonksiyonu içinde yer alan işlem satırı ile fonk() adlı fonksiyonu çağırır. Fonksiyon bir karakter dizisini ekrana yazar.