C определяет 0 как false, а все остальное как true.Позитив, негатив, что угодно.
Мне кажется, я недавно выступал за использование 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;
}
Это не лучше, чем иметь тип be int
, но, по крайней мере, вы явно указываете, для чего предназначен результат.
Кроме того, как указано выше, лучше bool
может быть:
typedef enum { false, true = !false } bool;
Я считаю, !
гарантированно вернет 0 или 1, но я могу ошибаться, ивышеупомянутое работает хорошо в любом случае.