Должен ли я использовать C (99) логическое значение? (также c ++ booleans в c ++?) - PullRequest
2 голосов
/ 10 июня 2010

Я не много занимался программированием на c, но когда я делаю, когда мне нужно false, я ставлю 0, когда хочу true, я ставлю 1 (например, while (1)), в других случаях я использую такие вещи, как "while (ptr) "или" if (x) ".

Если я попытаюсь использовать булевы значения C99, я должен рекомендовать их другим, если я помогаю новичкам в программировании изучать основы c (думая о студентах cs 1 ??))?

Я почти уверен, что компилятор Visual Studio поддерживает c99 bools, но много ли проектов (с открытым исходным кодом и c-приложений в промышленности) компилируются для c89?Если я не использую C bools, я должен, по крайней мере, сделать что-то вроде #define TRUE 1 #define FALSE 0?

А как насчет булевых значений c ++ (для c ++)?

Ответы [ 5 ]

5 голосов
/ 10 июня 2010

В C ++ нет причин не использовать его.В C я использую только int для этой задачи, без #define или чего-то подобного.На мой взгляд, имена переменных вроде isDefinition достаточно ясны, чтобы указывать, что происходит.

Конечно, нет ничего плохого в определении собственного bool или использовании значений <stdbool.h>.

3 голосов
/ 10 июня 2010

Да, вы должны использовать языковые абстракции, когда они доступны.Когда я использую старый компилятор C, я все еще создаю некоторую абстракцию bool.Использование литералов в вашем коде - очень плохая практика.

2 голосов
/ 10 июня 2010

Компилятор может улучшить оптимизацию, если знает, что переменная логическая. Также при использовании целочисленных значений легче вводить ошибки при использовании в побитовом контексте, поскольку целочисленные значения могут быть случайно установлены в значения, отличные от 1

2 голосов
/ 10 июня 2010

C ++ boolean хороши тем, что являются частью языка и в настоящее время поддерживаются практически любым C ++ компилятором.

Логические значения C99 кажутся хорошей идеей, но имейте в виду, нужно ли когда-либо писать код, который вы пишете сегодня, в проекте C89 ...

1 голос
/ 10 июня 2010

Используйте bool в C ++.Он существует уже много лет, и каждый компилятор C ++ поддерживает его. Используйте его на C, если ваш код требует других функций C99.Не используйте его в коде, предшествующем C99, поскольку любое ненулевое значение будет интерпретироваться как истина, а использование определений может привести к ошибкам, которые трудно отследить (некоторые функции библиотеки C задокументированы так, чтобы возвращать любое ненулевое значение intзначение, и даже если обычно плохая практика - писать что-то вроде

if (var==TRUE) { ... }

, подобные вещи могут сломаться и даже работать по-разному в разных компиляторах / операционных системах.

...