【发布时间】:2011-03-26 06:19:17
【问题描述】:
我有一个整数函数,它返回一个大范围的整数(在 C 中)。 我应该如何处理无效输入?我的意思是如果输入无效,它应该返回什么? 对不起,如果这个问题太基本了。我没有经验,在其他任何地方都找不到答案。
【问题讨论】:
标签: c exception-handling
我有一个整数函数,它返回一个大范围的整数(在 C 中)。 我应该如何处理无效输入?我的意思是如果输入无效,它应该返回什么? 对不起,如果这个问题太基本了。我没有经验,在其他任何地方都找不到答案。
【问题讨论】:
标签: c exception-handling
取决于取值范围。例如,如果您的函数只希望在成功时返回正值,则返回 -1 表示错误。如果它通常只返回值 >0,则在错误时返回 0。
如果它返回 int 范围内的任何可能值,那么您可能需要不同的方法,例如
bool GetValue(int inputValue, int *outResult);
您的函数将结果存储在 outResult 中,如果发生错误则返回 false。
【讨论】:
您的输出范围是否为负数?如果不是,-1 是一个合理的标准返回代码。你从哪里得到输入?
【讨论】:
这个输入来自哪里?我假设来自用户或文件。忘记该死的 C 函数希望返回调用的任何内容,我建议在函数开头检查输入是否为 int:
if (userinput/1.00 == (int)userinput)
We have an integer! Rest of the function goes here...
else
Do something else like abort the function and change the 'input'...
请原谅任何低效/不正确的代码,我自己就是编程菜鸟。
【讨论】:
确实没有适用于所有情况的标准方法。 -1 是常见的“一般错误”返回值。你也可以像这样做一堆定义:
#define MEMORY_ERROR 1
#define OUT_OF_BOUNDS 2
#define ... 3
etc...
然后你可以这样做:
int func()
{
...
...
if(condition) {
// Error handling
return MEMORY_ERROR;
}
...
if(condition) {
// Error handling
return OUT_OF_BOUNDS;
}
}
或类似的东西。
【讨论】:
在用缺乏异常处理的语言编写代码时,我的偏好是始终使用返回值作为错误指示符。
int get_value(int *value)
{
if ( input_ok )
*value = input;
return 0;
return -1;
}
这似乎不切实际,因为它迫使您使用中间变量来存储函数结果,但它多次证明对捕获错误并正确处理它们很有用(您永远不能依赖用户输入)。
另外,您应该注意,使用特殊值来显示错误并不是一个好主意:您永远不知道您的代码会发生什么。如果以后你想添加一个新特性,不幸的是这个特殊值对这个特性很有用,你会怎么做?用另一个特殊的错误值编写一个新函数?如果输入应该涵盖返回类型的整个范围怎么办?如果这是一个更大项目的一部分,你如何确保每个可能使用你的函数的程序员都知道它的特殊价值?
所以在安全方面犯错:不要使用特殊值并使用专用的错误处理路径。
注意你可以把上面的代码倒过来写int get_value(int *error);
【讨论】: