2015-02-16 24 views
5

Załóżmy mamy wyrażenie jakrelacyjne operatorzy wynik oceny

(x > 5) 

w języku C. Czy istnieje jakakolwiek gwarancja danego języka/standardu, że wyrażenie zostanie ocenione na 0, gdy jest fałszywe i na 1, kiedy to prawda?

+0

Może być zoptymalizowane: w 'jeżeli (x> 5) printf ("Hello X =% d \ n", x), zwanego dalej kompilator prawdopodobnie nie będzie emitował kodu porównującego wynik 'x> 5' do 1. Po prostu wyemitowałby kod dla testu' x> 5' i skoku warunkowego. –

Odpowiedz

12

Tak, jest gwarantowana przez standard.

Zgodnie z C11 standardowego dokumentu, rozdział 6.5.8, ustęp 6 [operatorów relacji]

Każdy z podmiotów < (poniżej), > (powyżej), <= (mniej niż, lub równy) i >= (większy lub równy) musi dać 1, jeśli określona relacja to true i 0, jeśli jest to false. Wynik ma typ int.

Aktualizacja: Ten sam rozdział i akapit także dla standardu C99.

+0

@Gopi Cytuję standard, myślę, że nie wolno mi w tym umieścić własnych słów. –

0

W gcc zostanie oceniony jako jeden i zero. Rozważmy następujący program

#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; 
} 

Daje wyjście

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

Pytanie brzmi, czy standard gwarantuje coś, a nie konkretną implementację. – juanchopanza