Лучше ли сравнивать переменную логического типа с "== FALSE" и "! = FALSE" или с "== FALSE" и "== TRUE"?
- Ни того, ни другого.
С логическим типом C _Bool
не используйте ==
или !=
для оценки истинности.
@ Steve Summit @ Антти Хаапала @ Джон Боде
_Bool x;
if (x) // to assess truth-ness
if (!x) // to assess false-ness
Если остается сильное желание использовать ==
, !=
, как и многие проблемы со стилем, лучше всего следовать рекомендациям кодирования вашей группы.
Отсутствует руководство по кодированию группы- сделайте их.
Используйте <stdbool.h>
для доступа к bool, true, false
вместо кода TRUE
, FALSE
.
@ Евгений Ш.
Какой из них безопаснее использовать?«== TRUE» или «! = FALSE»
Обратите внимание, что сравнение a == TRUE
может неожиданно завершиться неудачей, поскольку операнды сравниваются как целые числа, FP или указатели, а не как логические значения.Это может не дать сравнение истинности, если a
не является логическим значением со значением "истина", отличным от 1, даже если TRUE
является логическим значением 1.
double a = 0.999999;
// Both are false
if (a == TRUE) { ... } // The arithmetic value of `a` is used, not its "truth"
if (a == FALSE) { ... }
// better as
if (a) { ... } // As if `a != 0`
else { ... }
Рассмотрим случаи, когда "истина "возвращается как ненулевое значение, возможно, не 1.
if(islower('a') == TRUTH) ... // The if() block might or might not execute
if(islower('a')) ... // The if() block will execute
a != 0
или a != false
имеет тенденцию быть более безопасным.
Стиль: я считаю ==
Код легче следовать, чем !=
, так как отрицания увеличивают умственную сложность людей. * Пример 1 065 ** +1066 *