PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable im Unterprogramm deklarieren



fredyxx
22.05.2016, 17:53
Hallo,

gibt es eine Möglichkeit ein Variable im Unterprogramm zu deklarieren, ohne sie als als globale Variable zu deklarieren?
GRUND:



// **************************************Unterprogram m lzahn2_ber *******************************


float lzahn2_ber ( float x1, float y1) {

//hier Berechnung

lzahn2 = sqrt( 21164.49 - cos (W4 + 0.09180432) * 20574.0 ); // die Ausgabe erfolgt in mm

float dleta_lzahn2 = lzahn2 - lzahn2_alt;

float lzahn2_alt = lzahn2;

// return lzahn2;

}



Ich möchte im UP diese Differenz berechenen lzahn2 - lzahn2_alt. Das kann natürlich nur funktionieren,
wenn lzahn2_alt beim ersten Mal einen Wert hat.
Als Parameter geht das m.E. auch nicht, weil der ja bei jedem UP-Aufruf wieder übernommen wird.

Wie regelt man sowas?

Gruß
fredyxx

HaWe
22.05.2016, 18:18
ja, das geht, du musst sie nur im Funktionsblock der betr. Funktion deklarieren, dann ist sie automatisch lokal.


int i; // ist global



void test () {
int j; // ist lokal
//...
}



float x; // ist global



void loop() {
int i, k; // hier beide lokal - Vorsicht bei Namensgleichheit wegen Verwechslungsgefahr, auf global i kannst du hier nicht zugreifen!
float y; // ebenfalls lokal
//...
}

fredyxx
22.05.2016, 18:50
ja, das geht, du musst sie nur im Funktionsblock der betr. Funktion deklarieren, dann ist sie automatisch lokal.


int i; // ist global



void test () {
int j; // ist lokal
//...
}



float x; // ist global



void loop() {
int i, k; // hier beide lokal - Vorsicht bei Namensgleichheit wegen Verwechslungsgefahr, auf global i kannst du hier nicht zugreifen!
float y; // ebenfalls lokal
//...
}

Das löst aber doch das Problem nicht. lzahn2_alt soll doch schon bei dem ersten Durchlauf einen Wert haben, damit die Gleichung

float dleta_lzahn2 = lzahn2 - lzahn2_alt; lösbar ist.

danach wird erst der neue zum alten Wert, der dann in den folgenden Durchläufen vorhanden ist

Gruß
fredyxx

Sisor
22.05.2016, 19:12
float lzahn2_ber ( float x1, float y1) {

static float lzahn2_alt = 0; // oder anderer Vorbelegungswert
float lzahn2 = ...
...
lzahn2_alt = lzahn2;
...
}

fredyxx
22.05.2016, 19:35
Ignoriert das Programm denn beim nächsten Aufruf des UPs diese Zeile?

HaWe
22.05.2016, 19:37
bei static wird nur das erste Mal ein Wert initialisiert, wird er im Verlauf geändert, bleibt immer der aktuellste Wert gespeichert.

ich hatte deine Frage auch falsch verstanden, weil du im Titel von "deklarieren" sprachst.
Die Frage ging aber
1. ums Deklarieren und
2. ums Initialisieren.
Den 2. Punkt hatte ich falsch verstanden.

fredyxx
22.05.2016, 19:39
Danke erst mal an euch beide.
Wenn ich nicht klar komme melde ich mich wieder.

Gruß
fredyxx

Unregistriert
22.05.2016, 19:40
Im Prinzip ja.
https://de.wikibooks.org/wiki/C-Programmierung:_static_%26_Co.

fredyxx
22.05.2016, 19:50
Klappt auch bei mir!! :)