最常用,但存在可讀性差、錯誤信息有限、成功/失敗定義不統一、調用者可忽略等問題。建議:Get 類函數用返回值攜帶結果,Set 類用返回值+回傳參數。統一定義狀態碼枚舉與解析宏。
errnoUnix 系統調用與 C 庫函數失敗時設置 errno。注意:成功時可能修改 errno,必須先檢查返回值再讀 errno;多線程下為線程局部存儲;使用 strerror/perror 格式化輸出。可自定義類 errno 機制。
goto破壞結構但適合集中錯誤處理。偽代碼模式:多個調用失敗統一 goto ErrHandle。
setjmp/longjmp跨函數跳轉,模擬異常機制。setjmp 保存棧環境,longjmp 恢復並返回非零值。注意:必須先調用 setjmp;longjmp 必須在 setjmp 作用域內;自動變量需加 volatile 保證一致性;大型項目不建議濫用,增加認知負擔。
signal/raise處理除零等硬件異常。信號處理函數中可用 sigsetjmp/siglongjmp 跳過故障指令。整型除零不可恢復會循環觸發,需設置默認處理或跳轉。
exit:正常終止,調用 atexit 登記函數,刷新 I/O 流。_exit/_Exit:直接進入內核,不刷新流。abort:發送 SIGABRT,異常終止。assert:僅 Debug 生效,條件失敗輸出文件/行/函數/表達式並 abort。不可用於檢查合法的運行時錯誤(如文件不存在)。Fork),內部處理錯誤並退出。err_doit/err_ret),支持變長參數、syslog、線程安全。