Какой из них безопаснее использовать? "== ИСТИНА" или "! = ЛОЖЬ" - PullRequest
0 голосов
/ 26 октября 2018

Лучше ли сравнивать переменную логического типа с:

  1. == FALSE и != FALSE; или
  2. == TRUE и != TRUE?

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Лучше ли сравнивать переменную логического типа с "== FALSE" и "! = FALSE" или с "== FALSE" и "== TRUE"?

  1. Ни того, ни другого.

С логическим типом 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 *

0 голосов
/ 27 октября 2018
  • TRUE и FALSE не являются стандартными C и поэтому не должны использоваться, если, возможно, вы не кодируете старую библиотеку C90, которая их использует (например, Windows API).
  • Логический тип в C: _Bool. Он может использоваться как bool и должен быть установлен в значения true или false с stdbool.h
  • Необходимость явного сравнения логического значения с истинным / ложным предполагает плохое именование переменных. Несколько распространенным стандартом именования для логических значений является добавление к ним префикса is, например: while(!isReady) { ... }.
  • Операторы == и != одинаково безопасны. Оба теоретически могут быть смешаны с = и =!, но любой достойный компилятор предупредит об этом («назначение в выражении» / «возможное неправильное назначение»).
0 голосов
/ 26 октября 2018

Синтаксис Everey имеет свое значение, и нет лучшего или более безопасного способа.Но вы всегда должны учитывать эти особые моменты сравнения, чтобы решить, какой синтаксис более безопасен в вашем случае:

  1. на языке C. Числа представляют логические значения: 0 - FALSE , а другие числа ИСТИНА .Вы можете ограничиться stdbool.h, чтобы предотвратить смешивание целых и логических значений.
  2. , если вы подключаетесь к базе данных SQL uisng C , в SQL сравнение с NULL равноне верно ни неверно .
  3. Если вы работаете в команде, я предлагаю всем членам команды использовать if (something==TRUE) вместо if(something), поскольку это означает, что вы имеете в виду логическое значениес something не целое число.Убедитесь, что ваши товарищи по команде согласны с этим синтаксисом, а также убедитесь, что вы рассмотрели дело № 1!
...