Должен ли я использовать C (99) логию? (Также C ++ Booleans в C ++?)
Вопрос
Я не сделал много программирования C, но когда я делаю, когда мне нужно ложное, я положил 0, когда я хочу правда, я положил 1, (например, в то время как (1)), в других случаях я использую такие вещи, как «пока (PTR)» или «если (х)».
Должен ли я попробовать использовать Booleans C99, я должен порекомендовать их другим, если я помогаю людям новым для программирования изучения C Основы C (думая о CS 1 ?? Студенты)?
Я уверен, что компилятор Visual Studio поддерживает Bools C99, но и много проектов (приложения с открытым исходным кодом и C в промышленности) компилируется для C89? Если я не буду использовать C Bools, я должен хотя бы сделать что-то вроде #define true 1 #define false 0?
Также как насчет C ++ Booleans (для C ++)?
Решение
В C ++ нет причин не использовать его. В C, я использую только int
Для этой задачи без каких-либо #define
или что-то подобное. Переменные имена, такие как isDefinition
достаточно ясны, чтобы указать, что происходит, на мой взгляд.
Конечно, нет ничего плохого в определении вашего собственного боля или использовать <stdbool.h>
.
Другие советы
Да, вы должны использовать языковые абстракции, когда они доступны. Когда я использую более старый компилятор C, я все еще создаю немного абстракции Bool. Использование литералов в вашем коде является очень плохим практикой.
Booleans C ++ в порядке, поскольку они являются частью языка и поддерживаются в основном любой компилятор C ++ в наши дни.
C99 Booleans кажется хорошей идеей, но просто имейте в виду, будет ли код, который вы пишете сегодня, когда-либо нужно использовать в проекте C89 ...
Компилятор может сделать лучшую оптимизацию, когда он знает, что переменная логическая. Также при использовании INT MAN проще ввести ошибки при использовании в побитовом контексте, так как IntS может быть случайно установлен на значения, отличные от 1
Используйте Bool в C ++. Он был там годами, и каждый компилятор C ++ поддерживает его, используйте его в C, если ваш код требует других функций C99. Не используйте его в коде Pre-C99, поскольку любое ненулевое значение будет интерпретировано как true, и использование Определения может привести к ошибкам, которые трудно отслеживать (некоторые функции библиотеки C документируются, чтобы вернуть любой ненулевой int ценность, и даже если это вообще плохая практика, чтобы написать что-то вроде
if (var==TRUE) { ... }
Такие вещи могут сломаться, и может даже вести себя по-разному под разными компиляторами / операционными системами.