Использование true и false в C - PullRequest
       71

Использование true и false в C

57 голосов
/ 12 февраля 2010

Насколько я вижу, в c

есть 3 способа использования логических значений.
  1. с типом bool, с последующим использованием true и false
  2. определение с использованием препроцессора #define FALSE 0 ... #define TRUE !(FALSE)
  3. Просто для непосредственного использования констант, то есть 1 и 0

Есть ли другие способы, которые я пропустил? Каковы плюсы и минусы разных методов?

Полагаю, самым быстрым будет номер 3, 2 еще легче читается (хотя побитовое отрицание немного увеличит накладные расходы), 1 наиболее читабельно не совместимо со всеми компиляторами.

Ответы [ 15 ]

1 голос
/ 12 февраля 2010

1 наиболее читаемо, не совместимо со всеми компиляторами.

Компилятор ISO C не имеет встроенного типа bool. Компиляторы ISO C99 имеют тип _Bool, а заголовок типа typedef bool. Так что совместимость - это просто случай предоставления собственного заголовка, если компилятор не совместим с C99 (например, VC ++).

Конечно, более простой подход - это компилировать ваш код на C как C ++.

1 голос
/ 12 февраля 2010

Реальной разницы в скорости нет. Они действительно одинаковы для компилятора. Разница в том, что люди пытаются использовать и читать ваш код.

Для меня это делает bool, true и false лучшим выбором в коде C ++. В коде на C есть некоторые компиляторы, которые не поддерживают bool (мне часто приходится работать со старыми системами), поэтому в некоторых случаях я могу использовать определения.

0 голосов
/ 24 апреля 2019

Я предпочитаю использовать

#define FALSE (0!=0) 
#define TRUE  (0==0)

или прямо в коде

if (flag == (0==0)) { ... }

Об этом позаботится компилятор. Я использую много языков, и необходимость помнить, что FALSE = 0 меня очень беспокоит; но если мне нужно, я обычно думаю об этой строковой петле

do { ... } while (*ptr);

и это заставляет меня видеть, что ЛОЖЬ - 0

0 голосов
/ 12 февраля 2010

Я не знаю вашей конкретной ситуации. Еще когда я писал программы на C, мы всегда использовали # 2.

#define FALSE = 0
#define TRUE = !FALSE

В противном случае это может быть инопланетная платформа для процессоров DOS или Intel. Но раньше я использовал и C, и ASM вместе для написания графических библиотек и графической IDE. Я был настоящим фанатом Micheal Abrash и собирался узнать о наложении текстур и так далее. Тем не мение! Это не предмет вопроса здесь!

Это была наиболее часто используемая форма для определения логических значений в C, так как этот файл заголовка stdbool.h тогда не существовал.

0 голосов
/ 12 февраля 2010

Раньше я использовал #define, потому что он облегчает чтение кода, и не должно быть снижения производительности по сравнению с использованием чисел (0,1), потому что препроцессор преобразует #define в числа перед компиляцией. После запуска приложения препроцессор больше не встает на пути, потому что код уже скомпилирован.

Кстати, это должно быть:

#define FALSE 0 
#define TRUE 1

и помните, что -1, -2, ... 2, 3 и т. Д. Все оценивается как true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...