2014-01-09 72 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.