C/C++ Fonksiyon göstericileri(Fonksiyonu adresi ile çağırmak)

C/C++ Fonksiyon göstericileri(Fonksiyonu adresi ile çağırmak)

Özel bir açıklama yapmaya gerek yok aslında, bir fonksiyonu çağırmak için illa adını yazmamıza gerek yoktur. Her ne kadar gereksiz gibi görüksede, fonksiyonun adresini tutan bir gösterici o fonksiyonu temsil edebilir yani o göstericinin adını yazınca , tuttuğu fonksiyonu çalıştırabilir.

Bu ufak ders notumu hazırlarken, birşeyi daha iyi farkettim; Kitaplardan bir konuyu öğrenirken, gerçek anlamda üstüne düşmüyoruz ve verimli olmuyor. Ben bu konuyu , kitaplardan c çalışırken görmüştüm ancak işime yaramaz deyip önemsememiştim ve sallamıştım. Bugün program yazarken hiç beklemediğim bir anda böyle bir ihtiyaç doğdu. Bilgisayarlar için program geliştirenlerin böyle ihtiyaçları belki olmayabilir ancak mikrodenetleyici için yazılım geliştirenlerin olmadık yerde olmadık ihtiyaçları olabiliyor. Örnek olması açısından aşağıdaki program parçasını paylaşıyorum, ilerde lazım olurda unutursam bende bakar hatırlarım…

void ad_fonksiyonu(void); //normal bir fonksiyon
void soyad_fonksiyonu(void); //normal bir fonksiyon
void (*fonksiyon_cagir)(void); //yukarıdaki fonksiyonları temsil edecek olan, fonksiyon gostericimiz

int main(void)
{
    fonksiyon_cagir = &ad_fonksiyonu; //fonksiyon göstericimize ad_fonksiyonu'nu bağdaştırıyoruz.
    fonksiyon_cagir(); //ad_fonksiyonu'nu çağırıyor
    fonksiyon_cagir = &soyad_fonksiyonu; //fonksiyon göstericimize soyad_fonksiyonu'nu bağdaştırıyoruz.
    fonksiyon_cagir();//soyad_fonksiyonu'nu çağırıyor
    return (0);
}

void ad_fonksiyonu(void)
{
    printf("Gokhan");
}

void soyad_fonksiyonu(void)
{
    printf("Beken");
}

Not: Gerekli include ve header dosyalarınızı eklemeyi unutmayın, program parçası herhangi bir platforma özel olmadığından,
hiç birşey eklemedim, benim,

#include "p18f4685.h"
#include <stdio.h>
#include <delays.h>
#include <usart.h>
#pragma config OSC = HS, WDT = OFF, LVP = OFF

gibi şeyler eklemem gerekiyordu ancak bunların konu ile alakası yok.

One thought on “C/C++ Fonksiyon göstericileri(Fonksiyonu adresi ile çağırmak)

Bir Cevap Yazın