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?
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?
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 totrue
i0
, jeśli jest tofalse
. Wynik ma typint
.
Aktualizacja: Ten sam rozdział i akapit także dla standardu C99
.
@Gopi Cytuję standard, myślę, że nie wolno mi w tym umieścić własnych słów. –
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
Pytanie brzmi, czy standard gwarantuje coś, a nie konkretną implementację. – juanchopanza
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. –