2015-02-16 10 views
5

Angenommen, wir haben einen Ausdruck wieRelationale Operatoren Auswertungsergebnis

(x > 5) 

in C-Sprache. Gibt es irgendeine Garantie, die von der Sprache/dem Standard gegeben wird, dass der Ausdruck zu 0 ausgewertet wird, wenn es falsch ist, und zu 1, wenn es wahr ist?

+0

Es optimiert werden kann: in 'if (x> 5) printf ("Hallo x =% d \ n", x);' die Der Compiler wird wahrscheinlich keinen Code ausgeben, der das Ergebnis von 'x> 5' mit 1 vergleicht. Er würde nur Code für den Test 'x> 5' und einen bedingten Sprung ausgeben. –

Antwort

12

Ja, es ist durch den Standard garantiert.

Gemäß dem C11 Standarddokument, Kapitel 6.5.8, Absatz 6 [Relationale Operatoren]

Jeder des Betreibers < (weniger als), > (größer als), <= (weniger als oder gleich) und >= (größer oder gleich) soll 1 ergeben, wenn die angegebene Beziehung true und 0 ist, wenn es false ist. Das Ergebnis hat den Typ int.

Update: Gleiches Kapitel und Absatz für C99 Standard auch.

+0

@Gopi Ich zitiere den Standard, ich denke, ich darf nicht meine eigenen Worte dazu sagen. –

0

In gcc wird es als eins und null ausgewertet. Betrachten wir folgendes Programm

#include <stdio.h> 

int main(void) 
{ 
    int a = 3; 
    int b = 4; 
    if((a > b) == 0) 
     printf("a > b is false\n"); 
    if((a < b) == 1) 
     printf("a < b is true\n"); 
    return 0; 
} 

Es gibt Ausgang

a > b is false 
a < b is true 
+0

Die Frage ist, ob der Standard etwas garantiert, nicht was eine bestimmte Implementierung tut. – juanchopanza