[英]How can I see modificated code, where inline functions are preprocessed
[英]Where can I see the list of functions that interact with errno?
在“The C Programming Language”一書中,它說:
“當文件出現錯誤或文件結束時,庫中的許多函數都會設置狀態指示器。這些指示符可以顯式設置和測試。此外,整數表達式
errno
(在<errno.h>
聲明)可能包含一個錯誤號提供有關最新錯誤的進一步信息。“
我在哪里可以看到這些功能的列表?
關於errno
標准說這個:
程序啟動時errno的值為零,但任何庫函數都不會將其設置為零。 如果在本國際標准的功能描述中沒有記錄errno的使用,則可以通過庫函數調用將errno的值設置為非零值,無論是否存在錯誤。
其中告訴我,任何庫函數都可以以任何方式使用errno
,除非:
errno
為0
請注意,該標准在腳注中建議如下:
因此,使用
errno
進行錯誤檢查的程序應該在庫函數調用之前將其設置為零,然后在后續庫函數調用之前檢查它。 當然,庫函數可以在輸入時保存errno
的值,然后將其設置為零,只要在返回之前errno
的值仍然為零時恢復原始值。
如其他答案中所述,對於不在標准中的函數來說,設置errno
也很常見。
您應該假設任何函數都可以設置errno,而不僅僅是標准庫中的那些。 因此,清單有點無意義。
如果發生錯誤,幾乎所有posix庫函數都可以設置errno,即函數返回-1時。 一個例外是線程函數,因為從多個線程設置一個全局錯誤變量將是非常危險的。 它們在成功時返回0,否則返回錯誤代碼(此代碼與errno兼容,因此您可以在其上使用strerror和perror函數)。
@Adam,正如Neil所說,任何函數都可以針對errno.h進行編譯並設置errno。 根據定義,不可能列出以這種方式編譯的所有實用程序以使用核心errno功能。
也就是說,有幾種方法可以將錯誤報告給用戶。 使用errno只是一個。
一個恰當的問題可能是errno
可以獲得的價值以及每個價值意味着什么。 你可以在intro(2)
看到它們。
您可以使用自己喜歡的編輯器和“在文件中查找...”來搜索包含errno
關鍵字的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.