globale variabeln in eine funktion verändern
-
hallo zusammen ich das oben genannte vorhaben verschut zu lösen das ganze sieht so aus
//varStart char liftPosLive = 0; char liftPosPast = 0; //varend unsigned char liftPos(unsigned char* bytes) { switch (bytes[1]) { case 14 : return 3; liftPosLife = 3; liftPosPast = 2; break; case 13 : return 2; liftPosLife = 2; liftPosPast = 1; break; case 11 : return 1; liftPosLife = 1; liftPosPast = 0; break; case 7 : return 0; liftPosLife = 0; liftPosPast = 0; break; } }jedoch bekomme ich immer die diese fehler meldung
S7_Roh.c: In function »unsigned char liftPos(unsigned char*)«:
S7_Roh.c:194: Fehler: »liftPosLife« wurde in diesem Gültigkeitsbereich nicht definiertkann mir einer sagen wo da das problem ist ?
-
Life != Live.
Und lass das mit den globalen Variablen.
-
1. Globale Variablen sind schlecht.
2. Globale Variablen sind sehr schlecht.
3. live != life
-
hehehe live ^^
aber das problem ist das ich die variabel mit den veränderten werten in eine andere funktion brauche undzwar hier
unsigned char able (char liftPosLife, char liftPosPast){ if (liftPosLive <= liftPosPast){ return 1; }else{ return 0; } }wie soll ich es sonst machen ?
-
Übrigens:
nach einem return braucht's keinen code mehr ..
eisenhauer schrieb:
...
unsigned char liftPos(unsigned char* bytes) { switch (bytes[1]) { case 14 : return 3; liftPosLife = 3; // dieser code wird niemals ausgeführt liftPosPast = 2; // dieser code wird niemals ausgeführt break; // dieser code wird niemals ausgeführt ...Zu Deiner 2. Frage: Entweder per Returnwert
struct liftPosErg { char liftPosLife, liftPosPast; unsigned char returnval; } liftPosErg liftPos(unsigned char* bytes) { switch (bytes[1]) { case 14 : return liftPosErg(3, 2, 3); case 13 : return liftPosErg(2, 1, 2); case 11 : return liftPosErg(1, 0, 1); case 7 : return liftPosErg(0, 0, 0); } }bzw. (da es sehr danach aussieht, als wäre Dein returnwert immer gleich liftPosLife ... weswegen man in auch weglassen kann):
pair<char, char> liftPos(unsigned char* bytes) { switch (bytes[1]) { case 14 : return make_pair(3, 2); case 13 : return make_pair(2, 1); case 11 : return make_pair(1, 0); case 7 : return make_pair(0, 0); } }oder per Referenz (hier wahrscheinlich besser):
unsigned char liftPos(unsigned char* bytes, char& liftPosLife, cahr& liftPosPast ) { switch (bytes[1]) { case 14 : liftPosLife = 3; liftPosPast = 2; return 3; case 13 : liftPosLife = 2; liftPosPast = 1; return 2; case 11 : liftPosLife = 1; liftPosPast = 0; return 1; case 7 : liftPosLife = 0; liftPosPast = 0; return 0; } }Gruß,
Simon2.
-
dann bau dir doch ne struktur die deine 2 daten enthält...und übergibt die jeweils als referenz
-
wie siehts den mit nach break aus wir da der return noch aus geführt ?
neben bei thx für die schnellen antworten
-
eisenhauer schrieb:
wie siehts den mit nach break aus wir da der return noch aus geführt ?
neben bei thx für die schnellen antworten
Siehe mein erstes Post.
-
eisenhauer schrieb:
wie siehts den mit nach break aus wir da der return noch aus geführt ?
neben bei thx für die schnellen antworten
Wenn Du eine Tür zumachst, kannst Du sie dann nochmal zumachen ohne sie vorher wieder aufzumachen?
-
dann ist break überflüssig in mein code richtig ?
-
loks schrieb:
eisenhauer schrieb:
wie siehts den mit nach break aus wir da der return noch aus geführt ?
neben bei thx für die schnellen antworten
Wenn Du eine Tür zumachst, kannst Du sie dann nochmal zumachen ohne sie vorher wieder aufzumachen?
Na, ich würde zum Vergleich eher das Verlassen des Hauses (inkl. hinter sich abschließen, Schlüssel einschmelzen und Adresse vergessen) heranziehen.
Die Aufgabe "Stell die Sahne in den Kühlschrank ("liftPosLife = 3;") und verlasse dann das Haus ("break") ", kann man danach eben nicht mehr durchführen.Gruß,
Simon2.
P.S.: Aufgrund der neuen Seite verweise ich nochmal auf mein erstes Post....