Здравствуйте всем!
Вопрос такой: чем отличается в VC++ 6.0 false от FALSE и true от TRUE и почему в коде сгенерированном ATL Wizard'ом встречается и то и другое?
Здравствуйте Аноним, Вы писали:
А>Здравствуйте всем! А>Вопрос такой: чем отличается в VC++ 6.0 false от FALSE и true от TRUE и почему в коде сгенерированном ATL Wizard'ом встречается и то и другое?
true и false — зарезервированные слова С++. int(true) == 1; int(false) == 0.
Здравствуйте Аноним, Вы писали:
А>Здравствуйте всем! А>Вопрос такой: чем отличается в VC++ 6.0 false от FALSE и true от TRUE и почему в коде сгенерированном ATL Wizard'ом встречается и то и другое?
BOOL — long(4 байта) не тоже самое, что и bool(1 байт)
FALSE — 0 тож самое, что и false
TRUE — 1 не тоже самое, что и true. Это частный случай true.
Проверяя на TRUE
if(Func() == TRUE) ты сделаешь ошибку, если фунцыя вернет ненулевое чисто.Надо смотреть описания функций и смотреть, что они возвращают.
Надо делать так if( Func() ).
Но, с другой стороны, если функция будет возврящать FALSE,TRUE,UNDEFINED — чисто гипотетический случай — так сделаешь ошибку.
Если проверять на true — будет дополнительно производиться преобразовываться тип из bool в BOOL(aka long)
А в ATL такое — такая вот ATL.
Re[2]: false vs FALSE and true vs TRUE
От:
Аноним
Дата:
05.11.02 10:25
Оценка:
Здравствуйте Алекс, Вы писали:
А>true и false — зарезервированные слова С++. int(true) == 1; int(false) == 0.
А>#define FALSE 0
А>#define TRUE 1
Кто ж спорит! Я поясню вопрос. Что заставило разработчиков ATL Wizard'a использовать и то и другое в своем коде?
OD>if(Func() == TRUE) ты сделаешь ошибку, если фунцыя вернет ненулевое чисто.Надо смотреть описания функций и смотреть, что они возвращают.
OD>Надо делать так if( Func() ).
OD>Но, с другой стороны, если функция будет возврящать FALSE,TRUE,UNDEFINED — чисто гипотетический случай — так сделаешь ошибку.
Позволю себе не согласиться. Действительно необходимо смотреть описания функций и чётко учитвывать возвращаемый тип в операторе if, к примеру:
if(Func() == TRUE)
if(Func() == S_OK)
if(Func() == NULL)
и так далее.
Делается это исключительно для удобства чтения исходного кода раз, и для облегчения поиска возможных ошибок два, что в общем-то взаимосвязано.
Что то я не понял, с чем ты не согласен ? Я вроде тоже самое скзал
OD>>if(Func() == TRUE) ты сделаешь ошибку, если фунцыя вернет ненулевое чисто.Надо смотреть описания функций и смотреть, что они возвращают.
OD>>Надо делать так if( Func() ).
OD>>Но, с другой стороны, если функция будет возврящать FALSE,TRUE,UNDEFINED — чисто гипотетический случай — так сделаешь ошибку.
S> Позволю себе не согласиться. Действительно необходимо смотреть описания функций и чётко учитвывать возвращаемый тип в операторе if, к примеру: S> if(Func() == TRUE) S> if(Func() == S_OK) S> if(Func() == NULL) S> и так далее.
S> Делается это исключительно для удобства чтения исходного кода раз, и для облегчения поиска возможных ошибок два, что в общем-то взаимосвязано.
т.е. если переменная или возвращаемое значение внутри программы на C[++] — используй bool, если есть вероятность, что это значение будет передаваться вовне (например, в VB или в Delphi) — используй виндовый BOOL. Аналогично и с другими типами.