Freie Position von Deklarationen

In C++ müssen Deklarationen in Funktionen nicht mehr am Anfang eines Blocks vor den ausführbaren Anweisungen stehen, sondern nur vor ihrer ersten Verwendung. Das kann sehr übersichtlich sein, wenn beispielsweise Schleifenzähler oder andere nur sehr lokal verwendete Variablen direkt bei ihrer Verwendung definiert werden:

// Time-stamp: "(15.11.01 16:10) lokal.cpp [Klaus Wachtler (aw38)]"

#include <iostream>

using namespace std;

int main()
{
  cout << "sosiedassaus!" << endl;
	
  for( int i=0; i<10; i++ )
    {
      cout << "i ist " << i << endl;
    }

  return 0;
}

Leider herrscht bei bei Microsoft eine beachtliche Ignoranz gegenüber allen Normen vor, auch was den Gültigkeitsbereich einer so definierten Variable betrifft: Der VC++ (zumindest bis Version 6.0) läßt i auch über die Schleife hinaus leben, während [Strou IV] klar sagt:

6.3.3.1 Deklarationen in for-Anweisungen

Eine Variable kann im Initialisierungsteil einer for-Anweisung deklariert werden. Wenn dieser Initialisierer eine Deklaration ist, bleibt die eingeführte Variable (oder die Variablen) bis zum Ende der for-Anweisung gültig. Beispiel:
void f( int v[], int max )
{
    for (int i=0; i<max; i++) v[i] = i*i;
}
Falls der Endwert eines Index nach dem Verlassen der for-Schleife noch benötigt wird, muß die Indexvariable außerhalb der for-Schleife deklariert werden...

Damit ist zwar beim GCC und allen anderen modernen Compilern, nicht aber mit dem VC++ folgendes standardkonform möglich:

  //...
  for( int i=0; i<10; i++ )
  {
    // ...
  }
  //...
  for( int i=0; i<5; i++ )
  {
    // ...
  }

Für den VC++ müßte das Beispiel so aussehen:

  //...
  for( int i=0; i<10; i++ )
  {
    // ...
  }
  //...
  for( i=0; i<5; i++ )
  {
    // ...
  }

Um Quelltext jetzt portabel zu halten, bis [Strou IV] auch in Redmond in den Bücherläden steht, hat man zwei Möglichkeiten:

AnyWare@Wachtler.de