Re[21]: Приведение char* к bool
От: Vamp Россия  
Дата: 11.04.11 13:27
Оценка:
J>но все таки это обман семантики TRUE[s]

Нету у TRUE[s] семантики. По семантике TRUE — не целое значение, а булевое. Нельзя складывать указатели и булевые значения. А значит, ее нельзя обмануть. Еще раз — если бы был способ сделать так, чтобы подобная конструкция не компилировалась, то я был бы обеими руками за. А заменять один бессмысленный результат на другой — не виду смысла.
Да здравствует мыло душистое и веревка пушистая.
Re[22]: Приведение char* к bool
От: jyuyjiyuijyu  
Дата: 11.04.11 13:34
Оценка:
Здравствуйте, Vamp, Вы писали:

J>>но все таки это обман семантики TRUE[s]


V>Нету у TRUE[s] семантики. По семантике TRUE — не целое значение, а булевое. Нельзя складывать указатели и булевые значения. А значит, ее нельзя обмануть. Еще раз — если бы был способ сделать так, чтобы подобная конструкция не компилировалась, то я был бы обеими руками за. А заменять один бессмысленный результат на другой — не виду смысла.

это в C++ оно булевое а в C оно целое (в C99 ввели какой то _Bool но студия поддерживает только ANSI C) вот в нет нет никаких булевых значений
Re[23]: Приведение char* к bool
От: Vamp Россия  
Дата: 11.04.11 13:42
Оценка:
J>это в C++ оно булевое а в C оно целое (в C99 ввели какой то _Bool но студия поддерживает только ANSI C) вот в нет нет никаких булевых значений
С точки зрения семантики оно булевое, мы его именно для этого сей макрос и породили.
Да здравствует мыло душистое и веревка пушистая.
Re[24]: Приведение char* к bool
От: jyuyjiyuijyu  
Дата: 11.04.11 13:53
Оценка:
Здравствуйте, Vamp, Вы писали:

J>>это в C++ оно булевое а в C оно целое (в C99 ввели какой то _Bool но студия поддерживает только ANSI C) вот в нет нет никаких булевых значений

V>С точки зрения семантики оно булевое, мы его именно для этого сей макрос и породили.
я понимаю вашу точку зрения у меня она немного отличная на этом и
прекратим дискуссию переходящую в бессмысленный спор
Re[22]: Приведение char* к bool
От: Roman Odaisky Украина  
Дата: 11.04.11 13:58
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Нету у TRUE[s] семантики. По семантике TRUE — не целое значение, а булевое. Нельзя складывать указатели и булевые значения. А значит, ее нельзя обмануть.


printf("something happened: %c", something_happened()["ny"]);


V>Еще раз — если бы был способ сделать так, чтобы подобная конструкция не компилировалась, то я был бы обеими руками за.


Явное приведение к bool нормализует ненулевые значения в единицу, что, по-моему, имеет право на существование:

int count_of_positive_values = (x > 0) + (y > 0) + (z > 0) + bool(is_something_else_positive());
// где функция (наследие C) возвращает 0 или нечто, что может и не быть единицей

хотя с другой стороны, в таких случаях можно было бы требовать явного преобразования к int для четкого выражения замысла, даже если int(bool(f()) выглядит громоздко.
До последнего не верил в пирамиду Лебедева.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.