Programmiersprache C/C++

Shortcuts

Bei der Auswertung von komplexeren logischen Ausdrücken ist es möglich, eine Auswertungskette abzubrechen (shortcut), wenn bereits nach Auswertung eines Teils der Terme das Ergebnis feststeht.
Auf diese Art und Weise kann die Arbeitsgeschwindigkeit erhöht werden.

Es muß damit gerechnet werden, daß der vom Compiler generierte Code solche Shortcuts vornimmt.
Einige Compiler veranlassen solche Shortcuts stillschweigend, andere weisen während des Übersetzungslaufs darauf hin.

Die in C und C++ vorhandene Möglichkeit, innerhalb von Ausdrücken die Werte von Variablen zu verändern, kann im Zusammenhang mit Shortcuts zu unerwünschtem Verhalten führen.

Beispiel 1:

  #include <stdio.h>

  int main(void)
  {
    int i = 0, j = 5;

    if ( ( j = i > 0 ) && i )
      printf("true ");
    else
      printf("false ");
    printf("%d %d\n", i, j);

    return 0;
  }
Alle getesteten Compiler lieferten
  false 0 0
Dem Ergebnis ist nicht anzusehen, ob ein Shortcut vorgenommen wurde. Der Wert von j wurde wie vorgesehen verändert.

Beispiel 2

  #include <stdio.h>

  int main(void)
  {
    int i = 0, j = 5;

    if ( i && ( j = i > 0 ) )
      printf("true ");
    else
      printf("false ");
    printf("%d %d\n", i, j);

    return 0;
  }
Alle getesteten Compiler lieferten
  false 0 5
Es wurde ein Shortcut vorgenommen: Der Wert von j wurde nicht wie vorgesehen verändert.

Beispiel 3

  #include <stdio.h>

  int main(void)
  {
    int i = 1, j = 5;

    if ( i || ( j = i > 0 ) )
      printf("true ");
    else
      printf("false ");
    printf("%d %d\n", i, j);

    return 0;
  }
Auch in diesem Programm wurde von den getesteten Compilern ein Shortcut vorgenommen.

Daraus ergeben sich folgende Schlußfolgerungen:


Zurück zum Menü
Zurück zur vorigen Seite Weiter zur nächsten Seite

P. Böhme, 07.03.1996