Hallo!
Sicherlich ne ganz einfache Anfängerfrage.
Folgende Situation:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
zahl = i + j;
}
}
Ist die Laufvariable i noch in der j-Schleife gültig?
Hallo!
Sicherlich ne ganz einfache Anfängerfrage.
Folgende Situation:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
zahl = i + j;
}
}
Ist die Laufvariable i noch in der j-Schleife gültig?
Ja. Lokale Variablen sind immer in ihren entsprechenden Code Blöcken { } gültig.
Wenn eine Variable unbekannt ist, meckert der Compiler
Dankeschön! ![]()
Soweit ich weiß gilt das mit lokalen Variablen in Funktionen und nicht in Kontrollstuckturen wie FOR. Daß muß aber jemand bestätigen.
Grüße Uwe
Wie gesagt sind lokale Variablen in ihren durch geschweifte Klammern markierte Blöcken gültig. Ob das jetzt eine Funktion, eine if-Abfrage oder eine Schleife ist ist vollkommen egal. Man kann auch einfach so { ... } schreiben ohne irgendeine Abfrage davor.
Wie gesagt sind lokale Variablen in ihren durch geschweifte Klammern markierte Blöcken gültig.
... ab der Stelle wo sie deklariert wurden, und natürlich auch in darin liegenden Blöcken, wenn dort nicht eine Variable gleichen Namens die ausserhalb definierte versteckt.
( Alles ohne Syntax-Gemeckere )
{
// Serial.println(i); // hier ist i nicht definiert : Syntax-Fehler, wenn diese Zeile nicht auskommentiert wäre
int i = 100 ; // Hier wird i definiert
i+= 23; // Hier wird i verändert ( auf 123 )
Serial.println(i);
for (int j = 0 ; j < i ; j++) // Hier wird j definiert
{
Serial.print(i); // hier ist das äussere i (123) verwendbar
Serial.println(j);
}
if ( j == i ) // hier ist j immer noch definiert, und nach dem Schleifenende auch auf 123 hochgezählt worden
{
int i = -1 ; // erlaubt, dieses i gilt ab hier
Serial.println(i); // -1
}
Serial.println(i); // hier gilt wieder das äussere i (123)
}
Das nur als kleine Ergänzung und zur Abschreckung ![]()
michael_x:
( Alles ohne Syntax-Gemeckere )
meine Arduino-IDE meckert:
if ( j == i ) // hier ist j immer noch definiert, und nach dem Schleifenende auch auf 123 hochgezählt worden
name lookup of 'j' changed for new ISO 'for' scoping
Macht meiner Meinung nach auch Sinn, weil j nur innerhalb der { } definiert ist. Die Anweisung steht aber danach.
Richtig !
Ein sinnvoller Unterschied zu
int j;
for (j=0; j < MAX; j++) {
// hier ist j natürlich definiert
}
// hier ist j == MAX definiert
Danke, noch was gelernt auf meine alten Tage.
Ist auch meist ein Fehler, wenn man die Schleifenvariable nach der Schleife noch verwendet.