Здравствуйте, lpd, Вы писали:
lpd>Пример абсолютно бессмысленный т.к. count всегда >0.
Как раз это и смысл исключения, защититься от случайной ошибки.
Без него придется писать:
Result ErrorCodeFunction(int count, int* returnValue)
{
if (count < -1) return ResultErrorInvalidArgument;
if (!returnValue return ResultErrorInvalidReturnArgument;
*returnValue = count > 100 ? 1 : 2;
return ResultSuccess;
}
А потом протаскиввать это всё через все функции и все ветвления.
Result res;
int returnValue;
if((res = ErrorCodeFunction(count, &returnValue) == ResultSuccess))
{
int returnValue2;
if((res = ErrorCodeFunction2(count, &returnValue2) == ResultSuccess))
{ ... }
else
{
return res;
}
}
else
{
return res;
}
Ах да, не забыть очистку ресурсов
В Rust и приделали макрос
try! который только этим и занимается.
lpd>Чистый C применяется только в ядре,где нужно работать с оборудованием и C++ только мешает, и в коде embedded устройств. Последние нередко real-time и задержки на обработку исключений составляют существенную проблему и недопустимы.
Не нужно смешивать всё и сразу.
Во первых в ядре можно и С++ а можно и даже более высокоуровневые языки та же
Singularity.
Проблемы с C++ там не от использования исключений, а например, от того, что таблица виртуальных функций может быть выгружена из памяти в неподходящий момент.
Разработка реального времени это другая тема и даже там
возможен C++.
В С ,между прочим, тоже нужно понимать что стоит делать , а что не стоит делать в этих случаях. Только об этом почему-то не вспоминают.