Нету у TRUE[s] семантики. По семантике TRUE — не целое значение, а булевое. Нельзя складывать указатели и булевые значения. А значит, ее нельзя обмануть. Еще раз — если бы был способ сделать так, чтобы подобная конструкция не компилировалась, то я был бы обеими руками за. А заменять один бессмысленный результат на другой — не виду смысла.
Здравствуйте, Vamp, Вы писали:
J>>но все таки это обман семантики TRUE[s]
V>Нету у TRUE[s] семантики. По семантике TRUE — не целое значение, а булевое. Нельзя складывать указатели и булевые значения. А значит, ее нельзя обмануть. Еще раз — если бы был способ сделать так, чтобы подобная конструкция не компилировалась, то я был бы обеими руками за. А заменять один бессмысленный результат на другой — не виду смысла.
это в C++ оно булевое а в C оно целое (в C99 ввели какой то _Bool но студия поддерживает только ANSI C) вот в нет нет никаких булевых значений
J>это в C++ оно булевое а в C оно целое (в C99 ввели какой то _Bool но студия поддерживает только ANSI C) вот в нет нет никаких булевых значений
С точки зрения семантики оно булевое, мы его именно для этого сей макрос и породили.
Здравствуйте, Vamp, Вы писали:
J>>это в C++ оно булевое а в C оно целое (в C99 ввели какой то _Bool но студия поддерживает только ANSI C) вот в нет нет никаких булевых значений V>С точки зрения семантики оно булевое, мы его именно для этого сей макрос и породили.
я понимаю вашу точку зрения у меня она немного отличная на этом и
прекратим дискуссию переходящую в бессмысленный спор
Здравствуйте, Vamp, Вы писали:
V>Нету у TRUE[s] семантики. По семантике TRUE — не целое значение, а булевое. Нельзя складывать указатели и булевые значения. А значит, ее нельзя обмануть.
V>Еще раз — если бы был способ сделать так, чтобы подобная конструкция не компилировалась, то я был бы обеими руками за.
Явное приведение к bool нормализует ненулевые значения в единицу, что, по-моему, имеет право на существование:
int count_of_positive_values = (x > 0) + (y > 0) + (z > 0) + bool(is_something_else_positive());
// где функция (наследие C) возвращает 0 или нечто, что может и не быть единицей
хотя с другой стороны, в таких случаях можно было бы требовать явного преобразования к int для четкого выражения замысла, даже если int(bool(f()) выглядит громоздко.