Возвращаемое значение функции как код ошибки - правила
От: Shmj Ниоткуда  
Дата: 25.04.23 02:20
Оценка:
Такой вопрос.

Вот есть проект с выводом функций в C-стиле, т.е. без фишек С++. А значит exception-ов нет.

Вместо них — старые недобрые коды ошибок. Ну т.е. функция возвращает код ошибки, а если еще и результат нужен — то используются указатели в аргументах.

И вот что. Некоторые функции все-таки нарушают парадигму — возвращают bool (к примеру), а текст ошибки наоборот через указатель в аргументах.

И как то вижу в этом бардак. Либо везде четко должно быть — функция возвращает код+текст ошибки а все остальное только через указатели в аргументах. Либо же наоборот — возвращает результат а код ошибки в аргументах. Ну или пакетом.

Как вы предпочитаете, если проектируете самостоятельно?
Re: Возвращаемое значение функции как код ошибки - правила
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 25.04.23 03:17
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Как вы предпочитаете, если проектируете самостоятельно?

В С++11 появился std::error_code. Я использую следую заветам Макконнелла, где ошибка — исключение, где не ошибка возврат true или false.
Sic luceat lux!
Re: Возвращаемое значение функции как код ошибки - правила
От: night beast СССР  
Дата: 25.04.23 05:41
Оценка: 1 (1) +1
Здравствуйте, Shmj, Вы писали:

S>Такой вопрос.


S>Как вы предпочитаете, если проектируете самостоятельно?


https://en.cppreference.com/w/cpp/utility/expected
Re[2]: Возвращаемое значение функции как код ошибки - правила
От: Shmj Ниоткуда  
Дата: 25.04.23 07:33
Оценка:
Здравствуйте, night beast, Вы писали:

S>>Как вы предпочитаете, если проектируете самостоятельно?

NB>https://en.cppreference.com/w/cpp/utility/expected

Т.е. у вас каждая функция возвращает expected? Прямо каждая каждая?
Re[3]: Возвращаемое значение функции как код ошибки - правил
От: night beast СССР  
Дата: 25.04.23 07:41
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>>Как вы предпочитаете, если проектируете самостоятельно?

NB>>https://en.cppreference.com/w/cpp/utility/expected

S>Т.е. у вас каждая функция возвращает expected? Прямо каждая каждая?


Как вы предпочитаете, если проектируете самостоятельно


могу и https://en.cppreference.com/w/cpp/error/error_code поставить. в зависимости от ситуации
Отредактировано 25.04.2023 7:44 night beast . Предыдущая версия .
Re[4]: Возвращаемое значение функции как код ошибки - правил
От: Shmj Ниоткуда  
Дата: 25.04.23 08:28
Оценка:
Здравствуйте, night beast, Вы писали:

NB>

NB>Как вы предпочитаете, если проектируете самостоятельно


NB>могу и https://en.cppreference.com/w/cpp/error/error_code поставить. в зависимости от ситуации


А exception-ы? Они вообще быстро работают или по возможности лучше не использовать?
Re[5]: Возвращаемое значение функции как код ошибки - правил
От: night beast СССР  
Дата: 25.04.23 08:34
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>А exception-ы? Они вообще быстро работают или по возможности лучше не использовать?


по обстоятельствам
в узких местах желательно без них. по обзорам, есть негативное влияние на оптимизацию.
в общем случае ничего плохого в исключениях не вижу.
Отредактировано 25.04.2023 8:42 night beast . Предыдущая версия .
Re: Возвращаемое значение функции как код ошибки - правила
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 25.04.23 19:00
Оценка:
Здравствуйте, Shmj, Вы писали:

S>проект с выводом функций в C-стиле, т.е. без фишек С++


Это религиозное, или по каким-то объективным соображеням?

S>Как вы предпочитаете, если проектируете самостоятельно?


Я с обычных кодов ошибок недавно перешел к возврату указателя на объект описания результата, где есть расширенный код (полный успех, частичный успех, устранимая неудача, фатальная неудача), место возникновения (файл/строка), текстовое описание или указание на способ его получения, указатель на предыдущий такой объект. При полном успехе можно возвращать нулевой указатель, но лучше предопределенный статический объект.
Re[5]: Возвращаемое значение функции как код ошибки - правил
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 25.04.23 19:03
Оценка:
Здравствуйте, Shmj, Вы писали:

S>А exception-ы? Они вообще быстро работают или по возможности лучше не использовать?


Если речь о возврате ошибки пользователю в UI, максимум раз в несколько секунд, то о быстродействии исключений можно вообще не думать. Если же они возникают сотни-тысячи раз в секунду, то могут уже ощутимо тормозить, раскрутка стека — дорогая операция.
Re[2]: Возвращаемое значение функции как код ошибки - правила
От: Shmj Ниоткуда  
Дата: 25.04.23 20:00
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

S>>проект с выводом функций в C-стиле, т.е. без фишек С++

ЕМ>Это религиозное, или по каким-то объективным соображеням?

Чтобы вызывать либу из других ЯП. C умеют все языки мира, а вот ++ лишь небольшой процент из них.
Re[3]: Возвращаемое значение функции как код ошибки - правила
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 25.04.23 20:40
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Чтобы вызывать либу из других ЯП.


Про extern "C" никогда не слышали?
Re[4]: Возвращаемое значение функции как код ошибки - правила
От: Shmj Ниоткуда  
Дата: 25.04.23 20:45
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Shmj, Вы писали:


S>>Чтобы вызывать либу из других ЯП.


ЕМ>Про extern "C" никогда не слышали?


Именно так там и сделано — по этому наружу exceptions не выводятся. Как можно было иначе меня понять?
Re[5]: Возвращаемое значение функции как код ошибки - правила
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 25.04.23 21:08
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Как можно было иначе меня понять?


Фразу "проект с выводом функций в C-стиле, т.е. без фишек С++" можно понять очень по-разному, поскольку выражение "вывод функций" не является сколько-нибудь распространенным термином, так что под "выводом" можно подразумевать все, что угодно, хоть немного подходящее по смыслу. Я его понял в том смысле, что функции строятся ("выводятся") из некоторого корпоративного шаблона, подразумевающего использование только возможностей C.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.