hardcoded...



  • hi,

    ich hab einen quelltext, der ist im moment ziemlich hardcoded

    if(strcmp(cBuffer, "Test1") == 0)
    	{
    		funktion1();
    	}
    
    if(strcmp(cBuffer, "Test2") == 0)
    	{
    		function2();
    	}
    
    if(strcmp(cBuffer, "Test3") == 0)
    	{
    		function3();
    	}
    

    jemand ne idee das ganze eleganter zu loesen? die stringcompares koennte man ja einfach in einer schleife durchlaufen lassen, aber wie koennte man die funktionsaufrufe handhaben?

    fuer ideen dankbar 😃



  • typedef void (*TestFunction) ();
    
    // Initialisierung
    TestFunction functions [3];
    functions[0] = function1;
    functions[1] = function2;
    functions[2] = functions3;
    
    // Auswertung
    int index = cBuffer[4]-'0'-1;
    functions[index]();
    

    MfG SideWinder



  • hatte ich auch schon uberlegt, aber dachte dass es nicht klappen wuerde... 😃

    thx



  • struct E {  const char* msg;  void(*func)(); } table[] = {
      {"eins", func1},
      {"zwei", func2},
      ...
      {0,0}
    };
    
    for(E* e=table; e->msg; ++e)
      if(strcmp(buf, e->msg)==0) e->func();
    

    // edit: viel zu langsam 🙄 wenn die strings immer in dem format sind, ist natürlich sidewinders version ohne strcmp vorzuziehen



  • #include <stdio.h>
    
    void hallo();
    
    void main()
    {
    	struct
    	{
    		void (*func)();
    	}
    
    	array[] = 
    	{
    		hallo()
    	};
    
    	array[0].func;
    
    }
    
    void hallo()
    {
    	printf("hallo");
    }
    

    (15) : error C2440: 'initializing' : 'void' kann nicht in 'void (__cdecl *)(void)' konvertiert werden
    Ausdruck vom Typ void kann nicht in andere Typen konvertiert werden

    inwiefern muss ich jetzt casten oder ander typen benutzen, ich kann damit nicht so recht was anfangen...



  • hallo()
    im struct in hallo umändern.

    und dann so aufrufen:

    array[0].func();



  • thx, alles bestens


Anmelden zum Antworten