lokale Laufvariablen in for-Schleifen...

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 :wink:

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.