C variablengültigkeitsbereiche.
bleicher
- programmiertechnik
0 Christian Seiler0 bleicher0 Vinzenz Mai0 Stefanie0 MudGuard0 Hopsel
Grüße,
ich habe bereits gegoogelt, könnte die ergoogelten ergebnisse aber leider nicht benutzen ;( doof wie immer halt.
Das Ziel: es gibt einige Variablen die global gelten sollen. Die will ich mehrfach auf die "Urwerte" zurücksetzen.
Dafür wollt eich eine funktion schreiben - sowas wie reset(); die sämtlichen variablen wieder die gewünschten Werte zuweist. Die Frage ist bloß - wie?
selbst wen ich eine variabe global declariere (vor main() declarieren, richtig?)- jegliche veränderungen innerhalb der funktionen werden die globalen werte nicht betreffen.
gibt es da eine Lösung außer dass ich jedes "Anfassen" der variabeln in eigene functionen packe ?
MFG
bleicher
Hallo,
Das Ziel: es gibt einige Variablen die global gelten sollen. Die will ich mehrfach auf die "Urwerte" zurücksetzen.
Dafür wollt eich eine funktion schreiben - sowas wie reset(); die sämtlichen variablen wieder die gewünschten Werte zuweist. Die Frage ist bloß - wie?selbst wen ich eine variabe global declariere (vor main() declarieren, richtig?)- jegliche veränderungen innerhalb der funktionen werden die globalen werte nicht betreffen.
gibt es da eine Lösung außer dass ich jedes "Anfassen" der variabeln in eigene functionen packe ?
Ich verstehe Dein Problem nicht ganz:
#include <stdio.h>
// Originalwerte
#define ORIG_var1 1
#define ORIG_var2 2
int var1 = ORIG_var1;
int var2 = ORIG_var2;
void resetMyGlobalVars () {
var1 = ORIG_var1;
var2 = ORIG_var2;
}
void incVar1 () { var1++; }
void incVar2 () { var2++; }
int main (int argc, char **argv) {
printf ("var1 = %d, var2 = %d\n", var1, var2);
incVar1 ();
incVar1 ();
incVar2 ();
printf ("var1 = %d, var2 = %d\n", var1, var2);
resetMyGlobalVars ();
printf ("var1 = %d, var2 = %d\n", var1, var2);
return 0;
}
Ich sollte übrigens noch erwähnen, dass globale Variablen i.A. eine schlechte Idee sind - und das was Du zu versuchen scheinst, sieht für mich irgendwie nach unsauberem Codedesign aus. Ich würde an Deiner Stelle das ganze Konzept eventuell mal überarbeiten wollen.
Ausnahmen bestätigen selbstverständlich die gerade genannte Regel.
Viele Grüße,
Christian
Grüße,
ich habe das jetzt mit
void reset(void){
::A=1, ::B=0, ::erg=0, ::C=0.5, ::X=3.14149, ::Y=2.71;
}
gelöst - ist aber schlecht, oder?
Das ist ein Aufgabe - wir haben 5 variablen, die nahc und nach durch allerlei operatoren gejagt werden, (zB A && !B , B-- && Y-- etc.)
man muss es ausgeben lassen und erklären warum dies oder jenes rauskam.
mein ansatz ist derzeit -
printf("\n\nA=%d, B=%d, C=%.1f, X=%.5f, Y=%.2f",A,B,C,X,Y);
erg=B-- && Y--;
printf("\nB-- && Y--\t\t\t%d", erg);
reset();
nach sowas MUSS ich die variablen ja wieder in den "urzustand" versetzen.
MFG
bleicher
Hallo,
Das ist ein Aufgabe - wir haben 5 variablen, die nahc und nach durch allerlei operatoren gejagt werden, (zB A && !B , B-- && Y-- etc.)
man muss es ausgeben lassen und erklären warum dies oder jenes rauskam.mein ansatz ist derzeit -
printf("\n\nA=%d, B=%d, C=%.1f, X=%.5f, Y=%.2f",A,B,C,X,Y);
erg=B-- && Y--;
printf("\nB-- && Y--\t\t\t%d", erg);
reset();
>
> nach sowas MUSS ich die variablen ja wieder in den "urzustand" versetzen.
Nein. Clevererweise schreibt man für jeden Test eine Funktion und übergibt der Funktion die benötigten Werte. Globale Variablen sind hier sicher eine ganz schlechte Idee. Gerade weil stets von den "Ausgangswerten" ausgegangen werden soll.
Freundliche Grüße
Vinzenz
Hi,
nach sowas MUSS ich die variablen ja wieder in den "urzustand" versetzen.
aber dafür brauchst Du keine globalen Variablen (gewöhn Dir so einen Blödsinn gar nicht erst an) - probiers mal mit Parameterübergabe. Und zwar entweder per Referenzparameter an die Reset-Funktion oder Du packst statt dessen alle Berechnungen und Ausgaben in einzelne Funktionen und übergibst nur die Werte der Variablen. Dann musst Du gar nichts rücksetzen.
Übrigens, unter in C ist es zwar nicht zwingend aber üblich, Variablen immer klein zu schreiben, bzw. mit einem Kleinbuchstaben beginnen zu lassen. Nur Konstanten werden i.A. durchgehend groß geschrieben.
Ciao, Stefanie
Hi,
::A=1, ::B=0, ::erg=0, ::C=0.5, ::X=3.14149, ::Y=2.71;
printf("\nB-- && Y--\t\t\t%d", erg);
Wobei Du hier das Ergebnis ggf. verfälschst: Du läßt es als integer ausgeben.
cu,
Andreas
Hi MudGuard!
printf("\nB-- && Y--\t\t\t%d", erg);
Wobei Du hier das Ergebnis ggf. verfälschst: Du läßt es als integer ausgeben.
Es ist ja auch ein Interger...
MfG H☼psel