2014-01-09 74 views
3

我想使用errno库来定义项目(c语言)函数的返回值。我想知道的东西...errno变量的缺省值

我会做这样的事情:

#include <errno.h> 

int myfunction (void) 
{ 
    int res; 

    /*Some actions....*/ 

    if(success) 
    res = 0; 
    else if (fail) 
    res = -EIO; 

    return res; 
} 

我喜欢总是初始化我的本地变量,我想知道什么应该是使用变量的缺省值错误值(可能为0)?但我不喜欢默认设置:“SUCCESS”我更喜欢“失败”值。你对此有何看法(或规则)?

提前致谢。

+0

是什么'errno'与此有关? IIRC,在调用库函数之前,应始终设置'errno = 0',因为无法保证库函数在成功时将其设置为0。 – Kevin

+0

Errno是内核和标准库的属性。如果你坚持重复那个错误,定义你自己的全局变量,否则定义返回值。 – bmargulies

+0

如果问题是“我应该在函数开头的'int res ='之后放置什么”,我想这可能归结为您如何检查成功/失败。大概你实际上并没有像你在示例代码中展示的那样在你的示例代码中显示出可能失败的成功或失败的真相...... – tabstop

回答

4

如果您的问题是默认值,没有错误,则值为errno,并且所有返回错误状态的函数为errno,该值为0,如您所期望的那样。

但是,错误代码通常不会作为负值返回给调用者,因为您已在代码段中找到它。

2

有没有EGENERIC/EUNKNOWN值定义为一些一般的错误指标。

您有以下选择:

  • 保持乐观,默认结果集0指示成功。
  • 在为errno定义的一组值中使用功能特定的默认值。
  • 如果为 errno返回负值,则使用 1作为通用错误值。
  • 使用正值errno值并使用-1作为通用错误指示符。

对于最后的选项,在你的函数里面也设置了 errno


对POSIX系统更新

如果要使用errno定义的值有使用任何其他值,但0没有可移植的方法,为POSIX explicitly states

只有应该在程序中使用宏名* 1,因为错误编号的实际值未指定。

* 1 referrs到Exyz宏,as listed here.