Я пытаюсь решить, следует ли использовать исключения, утверждения или пограничные проверки в некоторых моих кодах.Проверка входных параметров
Программа содержит множество вычислений, которые зависят от пользовательского ввода. Программа работает во встроенной системе.
Приведенный ниже код является типичным примером. Weight_percent_salt параметр должен, очевидно, не может быть отрицательным, и это не должно быть более 100.
float Conductivity(const float weight_percent_salt)
{
float sigma_20C = 0.0;
if(weight_percent_salt > 16.2)
{
sigma_20C = 19.4;
}
else
{
sigma_20C = 2.0487 * weight_percent_salt - 0.2352 * pow(weight_percent_salt,2) + 0.0187 * pow(weight_percent_salt,3);
}
return sigma_20C;
}
В данном конкретном случае я могу ограничить ввод пользователя, чтобы находиться в диапазоне от 0 - 100% и оставить код как есть, но другие функции напрямую не зависят от пользовательского ввода, а являются результатом других вычислений.
Каков наилучший способ обработки плохих входных параметров в этих типах функций?
Это выглядит как хороший способ сделать это. В моем случае пользовательский ввод будет проходить через последовательный порт с использованием Modbus RTU, поэтому я бы просто вернул код ошибки вместо того, чтобы бросать исключение, если входные данные находятся за пределами указанных значений. Спасибо за ответ! –
@ Q-bertsuit: да, конечно, избегайте исключений, если вам это удастся. 'std :: optional', коды ошибок и аналогичные решения, на мой взгляд, более надежны, поскольку они используют систему типов и вынуждают пользователя справляться с ними. –
Приятно, я посмотрю std :: optional, хотя компилятор для этого конкретного проекта даже не поддерживает C++ 11. –