Speicherklassen static auto register



  • Erst mal Hallo an alle User des Forums.

    Hier nun meine erste Frage:
    Ich habe die folgende Funktion vorliegen.
    Die Variable lokal_f soll bei jedem Aufruf der Funktion1 in main um 1 ansteigen sprich 111 112 113 ...
    Um diese Aufgabe realisieren zu können muß der Variable eine Speicherklasse im Sinne von static oder extern oder auto verwendet werden.
    Meine Frage lautet jetzt also wie kann ich das realisieren ohne die Funktion main zu ändern.
    Welche Speicherklasse muß ich verwenden damit die Zahl bei jedem Aufruf um 1 größer wird.

    Ich danke euch schon mal im voraus 😉

    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    /*                  Definition der Funktion1                           */
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    
    int Funktion1(int lokal1_m,int lokal2_m)/*Uebergabe zweier Argumente*/
    {
    	int lokal_f;					/*lokale Variable deklarieren*/
    	lokal_f=111;					/*Wertzweisung an lokale Variable*/
    	global=global+1;				/*Wertzuweisung an globale Variable*/
    	lokal1_m=lokal1_m+1;			/*Wertzweisung an lokale Variable*/
    	lokal2_m=lokal2_m+1;			/*Wertzweisung an lokale Variable*/
    	printf("\n\tFunktion1%5d    %5d",global,lokal1_m);
    	printf("    %5d    %5d",lokal2_m,lokal_f);
    	return (lokal1_m);			/*Rueckgabe eines Wertes an die Funktion main*/
    }
    /
    


  • Ohne Änderung in funktion1 kommst du nicht aus.

    2 Lösungsansätze

    Du definierst lokal_f als globale außerhalb von function1 (dafür werde ich jetzt bestimmt geprügelt);

    Du definiertst loacal_f als static. Beim allersten Aufruf von fuction 1 wird
    local_f mit 111 initilisiert nach dem verlassen der Funktion ist der Wert 112
    beim nächsten Aufruf wird die Variable nicht neu initialisiert und ist somit beim Verlassen 113

    ➡ Der Zweite Weg ist hier der richtige

    👍 Die Speicherklasse register ist ein Wunsch an den Compiler die Variable in einem CPU-Register zu halten, Visual C++ kümmert sich um solche Wünsche nicht habe hier erfahren.

    👍 extern bedeutet die Varaible ist anderswo definiert, wird eigentlich nur angewendet bei globalen Daten die einem eigenen C/C++ File definiert und initialisiert werden und dann in den andern C/C++ Files nur genutzt werden.



  • int Funktion1(int lokal1_m,int lokal2_m)/*Uebergabe zweier Argumente*/
    {
    	static int lokal_f;	/*lokale Variable deklarieren*/
    	lokal_f=111;		/*Wertzweisung an lokale Variable*/
    

    So hab ich es probiert aber die zahl bleibt weiterhin bei der Ausgabe 111 😕



  • int Funktion1(int lokal1_m,int lokal2_m)/*Uebergabe zweier Argumente*/
    {
    	static int lokal_f = 111;	/*lokale Variable deklarieren und Wertzweisung*/
    	++lokal_f;		/*lokale Variable inkrementieren*/
    


  • Das entscheidende siehst du in \aleph_0 ´s Korrektur
    Die Wertzuweisung muss Bestandteiul der deklaration sein sonst wird sich nicht nur beim ersten sondern jedesmal ausgeführt. 😃



  • Das war nen Volltreffer
    Vielen Dank an euch 😉


Anmelden zum Antworten