locale variable mit static definieren



  • Guten Abend,

    ich habe in einem C Buch gelesen, dass mit static angelegte locale variablen ihren Wert auch nach verlassen der Funktion behlaten. Dazu habe ich folgendes Programm zum Ausprobieren ausgeführt mit unerwartetem Ergebnis:

    #include <stdio.h>
    int Summe(int, int);
    
    int main(void)
    { 
    	int k;
    	k=Summe(4,6);
    //hier sollte 10 ausgegeben
    	printf("%d\n",k);
    //hier sollte 20 ausgegeben, da Gesamtsumme=10 und wird wegen static nicht
    //mit 0 initialisiert beim zweiten Aufruf der Funktion Summe 
    	printf("%d\n",k);
    	return 0;
    }
    
    int Summe(int a, int b)
    {
    	 static int Gesamtsumme=0;
    	Gesamtsumme=Gesamtsumme+a+b;
    	return Gesamtsumme;
    }
    

    kann mir jemand helfen ?
    danke im Voraus



  • Du Witzbold rufst die Funktion ja auch kein zweites Mal auf. 😉



  • wie könnte ich das Programm ändern, so dass ich den Unterschied wegen static festellen kann



  • wie könnte ich das Programm ändern, so dass ich den Unterschied wegen static festellen kann



  • Indem du die Funktion *trommelwirbel* nochmal aufrufst.



  • Oder so 😉

    #include <stdio.h>
    int Summe(int, int);
    
    int k()
    {
        return Summe(4,6);
    }
    int main(void)
    {
    //hier sollte 10 ausgegeben
        printf("%d\n",k());
    //hier sollte 20 ausgegeben, da Gesamtsumme=10 und wird wegen static nicht
    //mit 0 initialisiert beim zweiten Aufruf der Funktion Summe
        printf("%d\n",k());
        return 0;
    }
    
    int Summe(int a, int b)
    {
         static int Gesamtsumme=0;
        Gesamtsumme=Gesamtsumme+a+b;
        return Gesamtsumme;
    }
    


  • Oh, ich habe noch eine bessere Idee. Aber wehe, Du benutzt irgendwo den Buchstaben 'k' :p

    #include <stdio.h>
    int Summe(int, int);
    
    #define k (Summe(4,6))
    
    int main(void)
    {
    //hier sollte 10 ausgegeben
        printf("%d\n",k);
    //hier sollte 20 ausgegeben, da Gesamtsumme=10 und wird wegen static nicht
    //mit 0 initialisiert beim zweiten Aufruf der Funktion Summe
        printf("%d\n",k);
        return 0;
    }
    
    int Summe(int a, int b)
    {
         static int Gesamtsumme=0;
        Gesamtsumme=Gesamtsumme+a+b;
        return Gesamtsumme;
    }
    


  • danke leute und einen schönen Abend wünsche ich euch



  • Wirdbald schrieb:

    Oh, ich habe noch eine bessere Idee. Aber wehe, Du benutzt irgendwo den Buchstaben 'k' :p
    ...

    Das nenn' ich mal Elegant!

    (Oder sollte ich besser sagen: Hinterfotzig 🕶 )


Anmelden zum Antworten