Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, jyuyjiyuijyu, Вы писали:
J>>ведь по умолчанию там должен быть и так 0 ...
Q>Только до тех пор, пока другой разработчик не добавит в начало enum новый элемент, неявно изменив значения последующих.
это если кто то вместо
CURLE_OK == call
проверял на успех так
!call
???
к тому же если кто то добавит новый член в начало то он тоже будет 0 и если кто то
проверял как !call то он может ошибку принять за успех... WTF
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>это если кто то вместо J>
CURLE_OK == call
J>проверял на успех так J>
!call
J>???
Например. Или логировал коды возврата в виде чисел, а тут вдруг они все сдвинулись на 1 при обновлении библиотеки, и статистика перестала быть достоверной.
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?
В качестве комментария для человека, что OK по задумке равен нулю, а не потому, что случайно оказался в списке первым.
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?
и вообще почему это не сократили до:
enum{O,U,F,U2,N}C;
это ж сколько места на терабайтном диске сэкономить можно!!!
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>Всем привет
J>в cURL обработка ошибок устроена просто: код возврата + enum с возможными ошибками
J>определение enum начинается так
J>
J>typedef enum {
J> CURLE_OK = 0,
J> CURLE_UNSUPPORTED_PROTOCOL, /* 1 */
J> CURLE_FAILED_INIT, /* 2 */
J> CURLE_URL_MALFORMAT, /* 3 */
J> CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for
J> 7.17.0, reused in April 2011 for 7.21.5] */
J> ...
J>} CURLcode;
J>
J>в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?
Я тоже так часто делаю. Это явное обозначение контракта, о том что код успеха равен нулю, а не некоему произвольному числу.
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, jyuyjiyuijyu, Вы писали:
J>>в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?
BZ>и вообще почему это не сократили до: BZ>enum{O,U,F,U2,N}C;
Какие-то полумеры. Зачем enum, если есть int?
J>typedef enum {
J> CURLE_OK = 0,
J> CURLE_UNSUPPORTED_PROTOCOL, /* 1 */
J> CURLE_FAILED_INIT, /* 2 */
J> CURLE_URL_MALFORMAT, /* 3 */
J> CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for
J> 7.17.0, reused in April 2011 for 7.21.5] */
J> ...
J>} CURLcode;
J>
J>в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?
Вот скажите, зачем разработчики используют модификаторы доступа, ведь protected и private не дают никакого преимущества перед public, то есть при замене на него программа остаётся работоспособной, везде пишем struct и "не знаем проблем". Или зачем избавляться от магических чисел заменяя их константами при условии, что каждое такое число используется ровно один раз. Зачем писать объявление функций членов в одном месте, а определения в другом, компиляция всё равно сейчас не проблема, а с шаблонами C++03 так и вовсе необходимость. Но ведь нет, программисты пытаются тут разделить, там дописать, и таких примеров масса.
Самое главное в этом всём удобочитаемость и принятые в связи с этим группой разработчиков соглашения. К тому же сам C++ избыточен. Что касается меня, то присваивание первому значению нуля пишу в любом случае, иногда явно указываю числа, а не в комментах, как это сделал автор, то есть или явно укажу, или ничего не буду писать, но "= 0" будет по любому. Кстати, вот такие комменты как раз и не пишу, использую вместо этого //. На вопрос почему, потому что такое у меня соглашение, хотя оно может меняться.