C’de alt programlara fonksiyon denir. Fonksiyon sözcüğü burada matematiksel anlamıyla değil
diğer programlama dillerinde kullanılan, “alt program”, “prosedür”, “subroutine” sözcüklerinin
karsılığı olarak kullanılmaktadır.
Fonksiyonlar C dilinin temel yapı taslarıdır. Çalıstırılabilen bir C programı en az bir C
fonksiyonundan olusur. Bir C programının olusturulmasında fonksiyon sayısında bir kısıtlama
yoktur.
Fonksiyonların onları çağıran fonksiyonlardan aldıkları girdileri ve yine onları çağıran
fonksiyonlara gönderdikleri çıktıları vardır. Fonksiyonların girdilerine aktüel parametreler
(actual parameters) ya da argumanlar (arguments) diyoruz. Fonksiyonların çıktılarına geri
dönüs değeri (return value) diyoruz.
Bir fonksiyon iki farklı amaçla kullanılabilir :
1. Fonksiyon, icrası süresince belli amaçları gerçeklestirir. (Belli islemleri yapar)
2. Fonksiyon icrası sonunda üreteceği bir değeri kendisini çağıran fonksiyona gönderebilir.
Fonksiyonların Tanımlanması
Kendi yazdığımız fonksiyonlar için tanımlama (definition) terimini kullanıyoruz. C’de fonksiyon
tanımlama isleminin genel biçimi söyledir:
[Geri dönüs değerinin türü] ([parametreler])
{
…
…
}
Yukarıdaki gösterimde açısal parantez içinde belirtilen ifadeler zorunlu olarak bulunması
gerekenleri köseli parantez içinde belirtilen ifadeler ise bulunması zorunlu olmayan, isteğe
bağlı (optional) ifadeleri göstermektedir. Tanımlanan fonksiyonlar en az bir blok içerirler. Bu
bloğa fonksiyonun ana bloğu denir. Ana blok içinde istenildiği kadar içiçe blok yaratılabilir.
Asağıdaki fonksiyon tanımlamasından fonk1 fonksiyonunun parametre almadığını ve geri dönüs
değerinin de double türden olduğunu anlıyoruz.
double fonk1()
{
…
…
} Fonksiyonun ana bloğu
void Anahtar Sözcüğü
Bir fonksiyonun parametre değiskeni ya da geri dönüs değeri olmak zorunda değildir. Bir
fonksiyonun parametre değiskeni olmadığı iki sekilde belirtilebilir:
1. Fonksiyon parametre parantezinin içi bos bırakılır, yani buraya hiçbirsey yazılmaz.
2. Fonksiyon parametre parantezinin içine void anahtar sözcüğü yazılır.
fonk() fonk(void)
{ {
… …
} }
Yukarıdaki tanımlamalar C’de aynı anlama gelmiyor. Fonksiyon prototipleri konusunu
öğrenirken bu iki tanımlama arasındaki farkı da öğrenmis olacağız. Simdilik bu iki
tanımlamanın aynı anlama geldiğini ve fonksiyonun parametre almadığını belirttiklerini
varsayacağız.
Geri dönüs değerine ihtiyaç duyulmadığı durumlarda da geri dönüs değerinin türü yerine void
anahtar sözcüğü yerlestirilir. Örneğin:
void sample(void)
{
…
}
Yukarıda tanımlanan sample fonksiyonu parametre almamakta ve bir geri dönüs değeri de
üretmemektedir.
Fonksiyon tanımlarken geri dönüs değeri yazılmayabilir. Bu durum geri dönüs türünün olmadığı
anlamına gelmez. Eğer geri dönüs değeri yazılmazsa, C derleyicileri tanımlanan fonksiyonun int
türden bir geri dönüs değerine sahip olduğunu varsayarlar. Örneğin :
sample2()
{
…
}
Tanımlanan sample2 fonksiyonunun parametresi yoktur ama int türden bir geri dönüs değeri
vardır.
C dilinde fonksiyon içinde fonksiyon tanımlanamaz!
Örneğin asağıdaki durum error olusturur, çünkü sample2 fonksiyonu sample1 fonksiyonunun
içinde tanımlanmıstır:
double sample1()
{
…
int sample2() /* error */
{
…
}
…
}
Main İşlevi
C programlarının çalışması,ismi “main” olan fonksiyondan başlar.
int main ()
{
return 0;
}
Bu şekilde bir main int türden değer döndürmelidir.Ürettiği geri dönüş değeri,program çalışması bittikten sonra işletim sistemine aktarır.