В C true все, что не равно 0. (Но нередко мы используем перечисления для определения значений для состояний). Таким образом, чтобы сделать тесты истины, мы можем сделать следующее:Как обращаться с Tribools
typedef enum
{
FALSE,
TRUE
} BOOL;
// Some function
BOOL n = isTrue();
if (n)
{
// Do something
}
Какие есть некоторые дебаты, но я и другие предпочитают:
if (n == TRUE)
{
// Do something
}
Но если по какой-то причине функция isTrue()
возвращается значение кроме 1 для истины, то последнее не работает, и истина считается ложной.
Я проходил проверку кода, отмечая, что первым способом должен быть способ сделать это. Однако я вдруг понял, что иногда нам нужна идея третьего состояния, когда значение не было установлено. Но возможно ли это сделать и на C, и по-прежнему делать наши логические сравнения в первую очередь, как кажется, если мы присвоим любое другое значение этим значением «NULL», то оно все равно будет считаться истинным.
ИМХО первый вариант ** не ** предпочтительнее второго. Второй - более читаемый, если у вас нет правильных имен переменных, таких как 'isBlue' и т. Д. – Matthias
@Matthias, это, безусловно, предпочтительнее второго, если это просто по той причине, что' TRUE' - это ничего, что определено в стандарте , значение для использования - 'true' или' 1'. Но для «bool» первое действительно предпочтительнее. Можно было бы обсудить это для других типов, таких как указатели, но не для 'bool'. –
Я не был уверен, что теперь существуют булевы как тип в стандартах C. В большинстве мест, которые я использовал, C имеет тенденцию иметь перечисление, определенное для TRUE и FALSE, которое, возможно, я должен был бы сделать более ясным выше – Firedragon