【发布时间】:2016-02-26 06:02:51
【问题描述】:
我有一种情况,指针返回函数可以返回结构地址或 NULL 指针。当函数没有错误时,这两种情况都是可能的。仍然有可能出错,但我不能用 NULL 指针发出信号。那么,定义一些随机全局数据(ed. int 或 double)并使用其地址来指示错误是一种可能还是一种好的做法?
int error_variable;
func1(){
if(func2() != &error_variable)
...
}
pointer *func2(){
...
/**return some address or NULL in success,
&error_variable otherwise*/
}
我知道可以设置像errno这样的系统,但是这种形式会缩短代码并保持可读性。有很多函数,如 func2,具有不同的返回值类型,所以 &error_variable 是否应该转换为 void * 并且它确实有效?
【问题讨论】:
-
我不明白为什么要使用全局指针的地址,为什么不设置值?我的意思是,你返回指针并检查它的值。
-
为什么将
NULL设为有效指针?它的全部意义是无效的,所以你可以检查。我不明白为什么在没有错误的情况下它应该返回NULL。也许您应该对此进行更多解释。我发现您的方法存在可维护性问题,不是太糟糕,但也不是很好。 -
@iharob 一般的想法是该函数使用 2 个异常返回值
NULL和其他东西。 -
重点是我只使用了那个全局变量的地址,因为地址不能与任何正确的返回值相同。错误地址中的内容无关紧要。不确定我是否理解您的评论(您是否理解我的问题)@terencehill
-
我明白了,您认为该地址可以用作错误代码,因为该函数如果行为正确,将永远不会返回这样的值。在我看来,您应该重新考虑您的函数以返回一个合理的错误值,但也许您处于这样一种情况,这可能是一个有效的选项。
标签: c pointers error-handling