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 0Dem 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 5Es 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: