Когда это условие оценивается как ложное? - PullRequest
1 голос
/ 05 мая 2010

При каких обстоятельствах будет выполняться «False» часть следующего кода?

x = 20;
y = -30;
if (x > y) {
    // True part
}
else {
    // False part
}

Примечание: язык - C, компилятор - gcc (хотя некоторые другие компиляторы также могут делать то же самое).

Ответы [ 5 ]

6 голосов
/ 05 мая 2010

Если y имеет целочисленный тип без знака, он будет инициализирован в какое-то очень большое значение (из-за того, как представлены отрицательные целочисленные значения), а выражение сравнения будет иметь значение false.

2 голосов
/ 05 мая 2010

Даже если x и y равны int, вы всегда можете получить следующее ...

#define if(p) if(!(p))

... в теле вашего метода;)

2 голосов
/ 05 мая 2010

Только когда X и Y не подписаны.

2 голосов
/ 05 мая 2010
unsigned int x = 20;
unsigned int y = -30;

К сожалению, используемый мной компилятор даже не выдает предупреждения во время компиляции об этом.

1 голос
/ 05 мая 2010

Извините , это C ++. В любом случае, это просто весело, поэтому я не буду удалять, если кто-то не пожалуется.

Нужна была небольшая помощь от static_cast, но static_cast безопасно, верно?

enum E { ea = 20, eb = -30 } x;
enum F { fa = 20, fb = -30 } y;

bool operator>( E const &l, F const &r )
    { return static_cast<int>(l) < static_cast<int>(r); }

x = static_cast<E>( 20 );
y = static_cast<F>( -30 );

или немного слабее,

enum E { x = 20 };
enum F { y = -30 };

bool operator>( E, F )
    { return false; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...