Bedingte Abfragen in Abfragen...

07/10/2008 - 00:11 von Roland Damm | Report spam
Moin,

einfache Frage:

int a[10], i;
...
if ((a[i]>0) && (i<10))
{ .}

Kann ich mich - und wenn unter welchem Umstànden - darauf
verlassen, dass der Zugriff auf a[i] für den Fall das i= ist
nicht zu einem Speicherzugriffsfehler führt? Spielt die
Reihenfolge der Anfragen eine Rolle [alternativ: if ((i<10) &&
(a[i]>0)) ]?
Glückssache? Compilerabhàngig? Gibt's da allgemeine Regeln?

CU Rollo
 

Lesen sie die antworten

#1 Andreas Burmester
07/10/2008 - 02:23 | Warnen spam
Roland Damm writes:

einfache Frage:

int a[10], i;
...
if ((a[i]>0) && (i<10))
{ .}

Kann ich mich - und wenn unter welchem Umstànden - darauf
verlassen, dass der Zugriff auf a[i] für den Fall das i= ist
nicht zu einem Speicherzugriffsfehler führt?



Nein. (Und 'ne Bewertung von `a[11]' ist immer UB.)

Spielt die
Reihenfolge der Anfragen eine Rolle [alternativ: if ((i<10) &&
(a[i]>0)) ]?



Ja.

Glückssache?



Nein.

Compilerabhàngig?



Nein.

Gibt's da allgemeine Regeln?



Ja, alt- und wohlbekannte:

# ... the && operator guarantees left-to-right evaluation; there is a
# sequence point after the evaluation of the first operand. If the
# first operand compares equal to 0, the second operand is not
# evaluated. 6.5.13p4.

b.

Ähnliche fragen