что за практика такая с enum'ом
От: jyuyjiyuijyu  
Дата: 02.03.15 06:16
Оценка:
Всем привет

в cURL обработка ошибок устроена просто: код возврата + enum с возможными ошибками

определение enum начинается так

typedef enum {
    CURLE_OK = 0,
    CURLE_UNSUPPORTED_PROTOCOL,    /* 1 */
    CURLE_FAILED_INIT,             /* 2 */
    CURLE_URL_MALFORMAT,           /* 3 */
    CURLE_NOT_BUILT_IN,            /* 4 - [was obsoleted in August 2007 for
                                    7.17.0, reused in April 2011 for 7.21.5] */
    ...
} CURLcode;


в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?
Отредактировано 02.03.2015 6:22 jyuyjiyuijyu . Предыдущая версия .
Re: CURLE_OK
От: Qbit86 Кипр
Дата: 02.03.15 06:34
Оценка: 15 (1) +1
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>ведь по умолчанию там должен быть и так 0 ...


Только до тех пор, пока другой разработчик не добавит в начало enum новый элемент, неявно изменив значения последующих.
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: CURLE_OK
От: jyuyjiyuijyu  
Дата: 02.03.15 06:46
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>ведь по умолчанию там должен быть и так 0 ...


Q>Только до тех пор, пока другой разработчик не добавит в начало enum новый элемент, неявно изменив значения последующих.


это если кто то вместо

CURLE_OK == call


проверял на успех так

!call


???

к тому же если кто то добавит новый член в начало то он тоже будет 0 и если кто то
проверял как !call то он может ошибку принять за успех... WTF
Отредактировано 02.03.2015 6:53 jyuyjiyuijyu . Предыдущая версия .
Re[3]: CURLE_OK
От: Qbit86 Кипр
Дата: 02.03.15 06:52
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>это если кто то вместо

J>
CURLE_OK == call

J>проверял на успех так
J>
!call

J>???

Например. Или логировал коды возврата в виде чисел, а тут вдруг они все сдвинулись на 1 при обновлении библиотеки, и статистика перестала быть достоверной.
Глаза у меня добрые, но рубашка — смирительная!
Re: что за практика такая с enum'ом
От: Pzz Россия https://github.com/alexpevzner
Дата: 02.03.15 07:42
Оценка: +10
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?


В качестве комментария для человека, что OK по задумке равен нулю, а не потому, что случайно оказался в списке первым.
Re: что за практика такая с enum'ом
От: BulatZiganshin  
Дата: 02.03.15 11:36
Оценка: :))
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?


и вообще почему это не сократили до:

enum{O,U,F,U2,N}C;

это ж сколько места на терабайтном диске сэкономить можно!!!
Люди, я люблю вас! Будьте бдительны!!!
Re: что за практика такая с enum'ом
От: Шахтер Интернет  
Дата: 02.03.15 21:49
Оценка: +3
Здравствуйте, 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?


Я тоже так часто делаю. Это явное обозначение контракта, о том что код успеха равен нулю, а не некоему произвольному числу.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[2]: что за практика такая с enum'ом
От: watchmaker  
Дата: 03.03.15 14:29
Оценка: :)
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>в частности интересует, почему первому члену ЯВНО присваивается 0 ??? ведь по умолчанию там должен быть и так 0 ... WTF?


BZ>и вообще почему это не сократили до:

BZ>enum{O,U,F,U2,N}C;
Какие-то полумеры. Зачем enum, если есть int?
if (returncode == 3) { ... }
Re: что за практика такая с enum'ом
От: velkin Удмуртия https://kisa.biz
Дата: 03.03.15 20:23
Оценка: :)
Здравствуйте, jyuyjiyuijyu, Вы писали:

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?


Вот скажите, зачем разработчики используют модификаторы доступа, ведь protected и private не дают никакого преимущества перед public, то есть при замене на него программа остаётся работоспособной, везде пишем struct и "не знаем проблем". Или зачем избавляться от магических чисел заменяя их константами при условии, что каждое такое число используется ровно один раз. Зачем писать объявление функций членов в одном месте, а определения в другом, компиляция всё равно сейчас не проблема, а с шаблонами C++03 так и вовсе необходимость. Но ведь нет, программисты пытаются тут разделить, там дописать, и таких примеров масса.

Самое главное в этом всём удобочитаемость и принятые в связи с этим группой разработчиков соглашения. К тому же сам C++ избыточен. Что касается меня, то присваивание первому значению нуля пишу в любом случае, иногда явно указываю числа, а не в комментах, как это сделал автор, то есть или явно укажу, или ничего не буду писать, но "= 0" будет по любому. Кстати, вот такие комменты как раз и не пишу, использую вместо этого //. На вопрос почему, потому что такое у меня соглашение, хотя оно может меняться.

А ещё вот, ТОП лучших инструментов Cpp, в частности Artistic Style, а так же UniversalIndentGUI. Некоторые вещи лучше сразу доверить машине, пусть и настроенной вручную.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.