Re[6]: Разработка на чистом C
От: _NN_  
Дата: 31.10.16 11:15
Оценка: 12 (1)
Здравствуйте, 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++.

В С ,между прочим, тоже нужно понимать что стоит делать , а что не стоит делать в этих случаях. Только об этом почему-то не вспоминают.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.