Fonksiyon Prototiplerinin ve Bildirimlerinin Görünürlüğü

    C++ 'da fonksiyon kullanılmadan önce bildirilmeli ya da tanımlanmalıdır. Ana kodumuzun üzerinde tüm fonksiyonlarımızı yazarak sayfa içerisinde kalabalığa sebep oluruz, bunu engellemek için fonksiyon bildirimlerinin (function prototypes) kullanıldığından bahsetmiştik. Bunlar da yeterince fazlalaşınca da header dosyalarına geçiş yapıyoruz. 
    Eğer ki fonksiyonun çağırılması bu bildirim ya da tanımlamadan önce yapılırsa compile time hatası dediğimiz hata tipiyle karşılaşırız:

Severity Code Description Project File Line Suppression State

Error (active) E0304 no instance of overloaded function "topla" matches the argument list Project1 E:\!Blog\C++ Dersleri\Project1\merhabadunya.cpp 14

#include <iostream>
 
//int topla(int a,int b = 17);
//int topla(int, int, int);
 
int main() 
{
	int toplam = topla(5);
	// int toplam = 22;
}
 
int topla(int a, int b) // fonksiyon parametrelerine ulaşmak için isim veriyoruz
{
	int sonuc = a + b; // sonuc adıyla int tipinde bir değişken tanımlayıp
					   // a + b ye eşitliyoruz.
	return sonuc;	   // geri dönüş değerimizi belirliyoruz.
}
 
int topla(int a, int b, int c)
{
	return a + b + c;
}
 
 
yukarıdaki kod için topla fonksiyonlarının her ikisi de yazılmasına rağmen bu hataya sebebiyet vermiştir. Bildirim satırlarının "comment-out" yapıldığına dikkat edin. Bu hatayı engellemenin yolu en azından fonksiyon bildiriminin fonksiyon çağrısından önce yapılmasıdır. Yorum satırı haline getirilmiş iki bildirim satırı yorum satırı durumundan çıkıp kod haline getirildiğinde hata da giderilmiş olacaktır. Mutlaka bildirim yapmak zorunda da değiliz, şu da geçerli bir durumdur ancak dediğim gibi yukarı kısımda "kod kalabalığına" sebebiyet verir :

int topla(int a, int b) // fonksiyon parametrelerine ulaşmak için isim veriyoruz
{
	int sonuc = a + b; // sonuc adıyla int tipinde bir değişken tanımlayıp
					   // a + b ye eşitliyoruz.
	return sonuc;	   // geri dönüş değerimizi belirliyoruz.
}
int main() 
{
	int toplam = topla(5, 17);
	// int toplam = 22;
}
fonksiyonun çağırılmadan önce tanımlandığına dikkat edin.
    Prototip yazılırken fonksiyonun geri dönüş tipi int ve aldığı parametrelerin tipi (int,int) (adını yazma zorunluluğu yoktur) yazılmak zorundadır.
    Header dosyası kullanımı içinse yapılması gereken yeni bir header file oluşturup tüm fonksiyon bildirimlerini içine yazmak ve ana kodumuz içerisinde #include "oluştuğumuz header dosyasının adı.h" yazarak ana kodumuza dahil edilmesini istememizdir.

örnek olarak matematik.h dosyamızı oluşturalım ve içine fonksiyon bildirimlerimizi yazalım:

int topla(int a,int b = 17);
int topla(int, int, int);
ana dosyamız şu şekle gelebilir :

#include <iostream>
#include "matematik.h"
 
int main() 
{
	int toplam = topla(5, 17);
	// int toplam = 22;
}
int topla(int a, int b) // fonksiyon parametrelerine ulaşmak için isim veriyoruz
{
	int sonuc = a + b; // sonuc adıyla int tipinde bir değişken tanımlayıp
					   // a + b ye eşitliyoruz.
	return sonuc;	   // geri dönüş değerimizi belirliyoruz.
}
int topla(int a, int b, int c)
{
	return a + b + c;
}

bu durumda ilk derlemede matematik.o dosyası oluşturulup main.o içerisinde kullanılıyor olarak ilişkilendirilmiş olacaktır. Eğer ki fonksiyon bildirimlerini yazıp fonksiyonun içeriğini herhangi bir yerde yazmamışsak bu bize : unresolved external symbol hatası olarak döner. Bu, bana bir fonksiyon yazacağını söyledin ben herşeyi derlememe rağmen bu fonksiyona ulaşamadım demektir.



Yorumlar

Bu blogdaki popüler yayınlar

Arduino IDE Kod Satır Numaraları Nasıl Açılır

DMD2TUR | Arduino P10 Led Panel için Türkçe Karakter Desteği | Arduino P10 Led panel Türkçe yazı yazma

P10 Led Panel Nasıl Sürülür - Arduino kod