switch case yerine fonksiyon göstericisi kullanmak

switch case yerine fonksiyon göstericisi kullanmak

Nerden ihtiyaç oldu derseniz, picprojedeki şu başlığı okumanızı tavsiye ederim.

Switch-case yapısı, en baştan başlayarak, en son case’e kadar tek tek eşitlik kontrolü yapar, yaptığı an işini bitirmiş olur.

Case’lerin sayısı çok fazla ise programın yavaş çalışmasına sebep olur. Bu yüzden size daha hızlı bir yöntem göstereceğim.

 

Şurdaki işlemler yerine:

state = 255;
swtich(state)
{
   case 0 : islem0(); break;
   case 1 : islem1(); break;
   ...

   case 254 : islem254(); break;
   case 255 : islem255(); break;

   ...
}

 

Şurdaki işlemler çok daha hızlı çalışacaktır:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void islem0(void);
void islem1(void);
void islem2(void);
void islem3(void);
void islem4(void);
void islem5(void);
void islem6(void);
void islem7(void);
void islem8(void);
void islem9(void);

void (*fonksiyon_cagir)(void);

void* fonksiyonAdresleri[10]; //fonksiyonlarin pointer adreslerini tutan dizi
unsigned char state = 8;

int main(int argc, char *argv[]) {
    
    //fonksiyonlarin adreslerini bir kereye mahsus diziye atiyoruz:
    fonksiyonAdresleri[0]=&islem0;
    fonksiyonAdresleri[1]=&islem1;
    fonksiyonAdresleri[2]=&islem2;
    fonksiyonAdresleri[3]=&islem3;
    fonksiyonAdresleri[4]=&islem4;
    fonksiyonAdresleri[5]=&islem5;
    fonksiyonAdresleri[6]=&islem6;
    fonksiyonAdresleri[7]=&islem7;
    fonksiyonAdresleri[8]=&islem8;
    fonksiyonAdresleri[9]=&islem9;
    

    
    
    fonksiyon_cagir=fonksiyonAdresleri[state];
    

    for(state=0;state<10;state++){
        fonksiyon_cagir=fonksiyonAdresleri[state];
        fonksiyon_cagir();
    }
    
    
    printf("\r\n");
  	return 0;
}

void islem0(void){printf("fonksiyon 0 \r\n");}
void islem1(void){printf("fonksiyon 1 \r\n");}
void islem2(void){printf("fonksiyon 2 \r\n");}
void islem3(void){printf("fonksiyon 3 \r\n");}
void islem4(void){printf("fonksiyon 4 \r\n");}
void islem5(void){printf("fonksiyon 5 \r\n");}
void islem6(void){printf("fonksiyon 6 \r\n");}
void islem7(void){printf("fonksiyon 7 \r\n");}
void islem8(void){printf("fonksiyon 8 \r\n");}
void islem9(void){printf("fonksiyon 9 \r\n");}

 

 

MGB

One thought on “switch case yerine fonksiyon göstericisi kullanmak

Bir Cevap Yazın