Булевы литералы VB6 и C ++ - PullRequest
       4

Булевы литералы VB6 и C ++

3 голосов
/ 01 января 2012

Я изучаю C ++.Я происходил из: .NET и VB6.

Я заинтригован тем, что следующая веб-страница говорит о логических значениях: http://msdn.microsoft.com/en-us/library/ff381404(v=vs.85).aspx то есть

"Несмотря на это определениеTRUE, однако, большинство функций, которые возвращают тип BOOL, могут возвращать любое ненулевое значение для обозначения логической истины. Поэтому вы всегда должны писать это:

// Right way.
BOOL result = SomeFunctionThatReturnsBoolean();
if (result) 
{ 
    ...
}

"

Это относится и к VB6, т. Е. Есть ли проблема, говорящая: If BooleanValue = True Then?

Ответы [ 2 ]

8 голосов
/ 01 января 2012

Windows API был разработан для использования на C-программах.Который до C99 не имел типа bool .И все еще не полностью, C99 никогда не был реализован компилятором Microsoft, например.Поэтому им пришлось придумать обходной путь, который очень совместим с тем, как компиляторы C работают с логическими значениями.Int, где 0 - false, а все остальное - true.Таким образом, совет.

VB6 имеет выделенный логический тип и ключевые слова для литеральных значений True и False, поэтому не совсем такая же проблема.Однако вы все еще можете столкнуться с проблемами плохо написанных COM-серверов.Основным целочисленным значением для True является -1, что крайне несовместимо с реализацией многих других языков логического логического типа.Включая C. Есть веская причина, по которой VB6 является чудаком, его операторы «И» и «ИЛИ» не различают логическое и арифметическое и / или.Делая True равным -1 и False равным 0, нет никакой разницы.Проблемы могут возникнуть, когда COM-сервер возвращает 1, чтобы указать true вместо VARIANT_TRUE.

Но, прежде всего, написание If booleanVariable = True Then просто уродливо и утомляет многих программистов.Просто напишите If booleanVariable Then и покончите с этим.

2 голосов
/ 01 января 2012

Нет в VB, нет, так как True / False являются действительными логическими значениями.Однако в C / C ++ BOOL - это просто #define из int, поэтому вы можете присвоить переменной BOOL любое целочисленное значение (TRUE в C - это #define 1 (обычно) и FALSE a #определение 0).

Если вы хотите лучше перекрывать свой опыт работы с VB, используйте тип данных bool в C ++, который использует фактические значения true / false.

РЕДАКТИРОВАТЬ: ИзКонечно, в VB вы говорите If BooleanValue = TRUE.В C ++ эквивалент равен if (BooleanValue == true) (обратите внимание на == , который является оператором сравнения, в отличие от = , который является оператором присваивания), но в C ++ вы можете пропустить== true сравнение и просто используйте if (BooleanValue).

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