我有一个关于如果所述函数的参数没有完全正确排列的函数应该做什么的问题,这不是函数调用的错误。由于那句话没有多大意义,我将提供我当前的问题。为简单起见,这是我拥有的最相关和最基本的功能。
float getYValueAt(float x, PHYS_Line line, unsigned short* error)
*error = 0;
if(x < line.start.x || x > line.end.x){
*error = 1;
return -1;
}
if(line.slope.value != 0){
//line's equation: y - line.start.y = line.slope.value(x - line.start.x)
return line.slope.value * (x - line.start.x) + line.start.y;
}
else if(line.slope.denom == 0){
if(line.start.x == x)
return line.start.y;
else{
*error = 1;
return -1;
}
}
else if(line.slope.num == 0){
return line.start.y;
}
}
该函数尝试在给定某个 x 值的情况下找到一条线上的点。但是,在某些情况下,这可能是不可能的。例如,在 x = 3 行,如果将 5 作为值传递,我们就会遇到问题。如果选择的 x 值不在线路所在的区间内,则会出现另一个问题。为此,我包含了错误指针。给定这种格式,函数调用可以按如下方式工作:
void foo(PHYS_Line some_line){
unsigned short error = 0;
float y = getYValueAt(5, some_line, &error);
if(error)
fooey();
else
do_something_with_y(y);
}
我的问题与错误有关。请注意,返回的值允许为负数。返回 -1 并不能确保发生了错误。我知道有时最好使用以下方法来跟踪错误:
float* getYValueAt(float x, PHYS_Line line);
然后如果发生错误则返回 NULL,但我认为这需要动态内存分配,这似乎比我使用的解决方案更不明显。那么,发生错误的标准做法是什么?