已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。
5天前关闭。
Improve this question
我有一个函数,希望禁止调用者输入无效值(width or height〈=0).在Java或C++中我会抛出异常,但在C中没有这样的事情。我读到过一种方法是创建一个带有错误代码的枚举并返回它们,然而,这将需要改变函数的签名(从void到int),如果可能的话,我希望避免这种情况。目前的解决方案可能会导致不可预测的输出,感觉不对。
void set_dimensions(int width, int height, struct rectangle_t* rectangle){
if(width<=0||height<=0){
//The problematic part
rectangle->width=1;
rectangle->height=1;
return;
}
rectangle->width = width;
rectangle->height = height;
}
处理这种情况的最佳实践是什么?
2条答案
按热度按时间vi4fp9gy1#
目前的解决方案可能会导致不可预测的输出,它只是感觉不对。
1.使用
assert()
验证后置条件,或将消息记录到stderr
并调用abort()
。1.接受一个out参数作为指针,并使用它返回一个错误代码。
1.将函数的返回类型从
void
更改为int
,然后可以遵循POSIX约定,失败时返回-1,成功时返回0,或者类似的操作。5t7ly7z52#
您可以使用
setjmp
和longjmp
模拟类似于Java异常的内容: