我的函数从对象返回一个浮点值。如果函数找不到正确的浮点值,则应返回错误,以便我可以在代码中正确处理它。
我的问题是如何返回错误。
添加额外参数并使用它来设置错误标记的选项不是首选。
我可以返回一个神奇的值,这是一个有效的选择吗?我在程序中的浮点值永远不会超过非常大的数字(永远不会超过 10^12),因此返回 FLT_MAX 来检查错误可能是一种选择。
有更好的(便携式)方式吗?
我的函数从对象返回一个浮点值。如果函数找不到正确的浮点值,则应返回错误,以便我可以在代码中正确处理它。
我的问题是如何返回错误。
添加额外参数并使用它来设置错误标记的选项不是首选。
我可以返回一个神奇的值,这是一个有效的选择吗?我在程序中的浮点值永远不会超过非常大的数字(永远不会超过 10^12),因此返回 FLT_MAX 来检查错误可能是一种选择。
有更好的(便携式)方式吗?
如果你#include <math.h>
,你可以NAN
在错误的情况下返回。f
这是唯一的f == f
浮点数FALSE
。
返回一个魔法值是唯一的选择,除了设置一个全局(更糟)。
最好的解决方案是将原型修改为:
bool findAFloat(float *result);
这很清楚,易于使用,而且相当明显。
你也可以去:
float findAFloat(float ifNotFound);
如果没有找到值,让调用者决定返回什么。
您始终可以设置静态 const int ERROR_VAL = max float。然后做类似的事情if(result == ERROR_VAL)...
我认为返回NAN
是一种选择,这显示了如何NAN
和isnan
工作:
#include <math.h>
#include <stdio.h>
int main()
{
float a = NAN ;
float b = 10 ;
if( isnan( a ))
{
printf( "isnan\n") ;
}
if( isnan( b ))
{
printf( "isnan\n") ;
}
return 0 ;
}
例如,您可以设置errno
为,ERANGE
并在调用之前设置调用者的负担,并errno = 0;
在从您的函数返回后检查它。这类似于一些标准库函数的作用。
还有另一种处理方法。您可以创建一个单独的函数来检查是否存在正确的值,并仅在检查通过时调用返回值的浮点数。