C определяет 0 как ложное и все остальное, как верно. Положительный, отрицательный, любой.
Я считаю, что недавно я выступал за использование typedef enum { false, true } bool;
, поэтому я буду владеть этим. (Если мой исходный код не имеет typedef
участие, это был просчет с моей стороны.) Все ненулевые значения являются истинными, так что я не выступаю с использованием перечисленного bool
типа для таких вещей, как это:
if(x == true) // not what you want
if(!x == false) // works, but why so much effort?
Я обычно передаю просто if(x)
или if(!x)
для явных тестов по булевым значениям. Тем не менее, иногда это хорошо иметь логический тип:
bool is_something(int x)
{ // assume for the sake of an argument that the test is reasonably complex
if(/* something */) return false;
if(/* something else */) return true;
return false;
}
Это не лучше, чем тип будет int
, но по крайней мере вы быть четко с тем, что результат предназначен.
Кроме того, как на кого-то еще выше, лучше bool
может быть:
typedef enum { false, true = !false } bool;
Я считаю, что !
гарантированно возвращает 0 или 1, но я могу ошибаться, и выше работает хорошо в любом случае.
Все, что не является «ложным», является «истинным»? – khachik 2010-11-23 09:11:29
Я думаю, что это http://stackoverflow.com/questions/727196/boolean-true-positive-1-or-negative-1 ответит на ваш вопрос – 2010-11-23 09:27:43