你推荐在新的 C API 中使用 errno 吗?
是否应该使用其他报告问题的方法,例如http://developer.gnome.org/glib/stable/glib-Error-Reporting.html?
你有什么建议吗?
你推荐在新的 C API 中使用 errno 吗?
是否应该使用其他报告问题的方法,例如http://developer.gnome.org/glib/stable/glib-Error-Reporting.html?
你有什么建议吗?
errno
应保留给 C 标准库,程序应将其视为只读值。
编写新代码我强烈反对使用 errno 样式的全局变量来检查错误代码。假设您有功能a
,b
通过然后报告它们的状态,ab_error
您必须编写如下内容:
a();
if( ab_error == AB_NOERROR ) {
b();
if( ab_error == NO_ERROR ) {
/* ... */
}
}
你看,你相当快地堆积了嵌套级别。但是,如果您的函数返回错误代码,您可以这样编写:
int error_a;
int error_b;
if( (error_a = a()) == A_NOERROR
&& (error_b = b()) == B_NOERROR
){
/* ... */
} else {
/* test the error variables */
}
您甚至可以像这样链接多个错误条件:
int error_a;
int error_b;
int error_c;
if( (error_a = a()) == A_NOERROR
&& ( (error_b = b()) == B_NOERROR
|| (error_c = c()) == C_NOERROR )
){
/* ... */
} else {
/* test the error variables */
}
这比将整个内容分散在几个嵌套的 if 语句中更具可读性。
您总是可以问自己,全局errno
在具有多个线程(或其他形式的不包含全局变量的单独副本)的程序中工作得如何。典型的结论可能是“不太好”,因此其他解决方案可能更可取。