成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為啥C/C++返回0代表成功?

開發 前端
在早期的C語言編程實踐中,特別是在早期的Unix系統編程中,0被用作成功執行的返回值,即程序執行成功沒有錯誤發生,而非0值則表示出現了某種錯誤。

學電子的小伙伴都知道,我們的邏輯電平0代表低,1代表高。還有,邏輯運算時,0代表假,非0值代表真。

那么,你發現一個問題沒有,我們C/C++編程時,很多情況下都是返回0代表成功?

比如:RTOS創建任務返回“錯誤信息”

圖片圖片

OS_ERR_NONE這個值就是宏定義的0:

#define OS_ERR_NONE      0u

其實不止這個返回值,還有很多都是類似0代表成功(或無錯誤)。

在嵌入式C/C++編程中,函數返回0代表成功,一種廣泛接受的約定。

為什么會有這種約定?其實背后都是有故事的,下面簡單說幾點。

1、歷史原因

在早期的C語言編程實踐中,特別是在早期的Unix系統編程中,0被用作成功執行的返回值,即程序執行成功沒有錯誤發生,而非0值則表示出現了某種錯誤。

而Unix在當時又非常流行,后來,這種習慣隨著這些系統和語言的普及而變得普遍。

2、統一規范

因為有前面 Uinx 的案例,后面的開發者為了代碼的可讀性和可維護性,許多編程標準和規范都使用0表示成功,這樣可以使得代碼在不同的開發者和項目之間保持一致性。

3、行業潛規則

隨著時間的推移,這種使用0表示成功、非零值表示失敗的約定,逐漸成為了C語言及嵌入式編程中的行業潛規則。遵守這一潛規則可以使代碼更易于理解和維護,同時也便于不同程序員之間的協作。

同時,在編程社區中,這種約定已經深入人心,成為了編程實踐中的一種標準做法。因此,即使在新開發的嵌入式系統中,也往往會延續這一潛規則。

4、符合邏輯

從邏輯上講,成功通常被視為一種特殊情況(即只有一種可能),而失敗則可能由多種原因造成(即有多種可能)。

比如上面舉的例子RTOS中,存在很多種錯誤:

#define OS_ERR_NONE                     0u


#define OS_ERR_EVENT_TYPE               1u
#define OS_ERR_PEND_ISR                 2u
#define OS_ERR_POST_NULL_PTR            3u
#define OS_ERR_PEVENT_NULL              4u
#define OS_ERR_POST_ISR                 5u
#define OS_ERR_QUERY_ISR                6u
#define OS_ERR_INVALID_OPT              7u
#define OS_ERR_ID_INVALID               8u
#define OS_ERR_PDATA_NULL               9u
#define OS_ERR_TIMEOUT                 10u
#define OS_ERR_EVENT_NAME_TOO_LONG     11u
#define OS_ERR_PNAME_NULL              12u
#define OS_ERR_PEND_LOCKED             13u
#define OS_ERR_PEND_ABORT              14u
#define OS_ERR_DEL_ISR                 15u
#define OS_ERR_CREATE_ISR              16u
#define OS_ERR_NAME_GET_ISR            17u
#define OS_ERR_NAME_SET_ISR            18u
#define OS_ERR_ILLEGAL_CREATE_RUN_TIME 19u


//...


#define OS_ERR_TLS_NO_MORE_AVAIL      160u
#define OS_ERR_TLS_ID_INVALID         161u
#define OS_ERR_TLS_NOT_EN             162u
#define OS_ERR_TLS_DESTRUCT_ASSIGNED  163u
#define OS_ERR_OS_NOT_RUNNING         164u

你會發現,成功只有一種,錯誤有100多種。因此,使用唯一的0值來表示成功,并使用非零值來表示多種可能的失敗情況,在邏輯上更為清晰和合理。

5、兼容性更強

很多時候,我們做項目都會使用第三方庫,這個時候,如果你項目的規則和和第三方不一直,調試或維護代碼就很惱火,一會0,一會兒非0,你都不知道究竟是什么意思了。

6、其他

其實還有很多原因,什么編碼習慣、錯誤處理等,大致就是保持代碼一致性的意思。當然,也歡迎大家留言說出更多原因。

說了這么多,其實,我們都是建立在別人成功的基礎上,或者說站在巨人的肩膀上。你不要想著自己搞一套規則出來,這種情況,一般人都是找麻煩,除非你是真正的牛人。

責任編輯:武曉燕 來源: strongerHuang
相關推薦

2011-05-24 16:58:52

CC++

2024-02-19 08:11:40

C++編程尾返回類型推導

2011-07-14 17:45:06

CC++

2023-09-25 12:12:01

C++自動返回

2010-01-21 14:07:14

CC++聲明

2010-01-21 09:34:57

C++語法

2010-01-27 16:05:06

C++堆棧

2010-01-26 15:51:06

C++變量

2010-01-28 13:45:06

C++數組

2011-07-15 00:47:13

C++多態

2011-04-22 11:00:17

運維

2023-11-22 13:22:51

C++函數

2024-01-29 01:30:00

函數C++編程

2011-05-18 18:05:47

C#C++

2011-05-18 17:56:38

C#C++

2010-01-14 17:42:47

CC++

2010-01-15 15:52:18

CC++

2010-01-20 10:19:55

C++數組

2010-01-25 10:25:19

C++變量

2010-01-27 17:16:52

C++構造函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产美女在线免费观看 | 亚洲天堂影院 | 日韩电影一区 | 色综合一区二区 | 亚洲电影一区二区三区 | 国产精品一区在线观看 | 欧美精品1区2区 | 99久久99久久精品国产片果冰 | 天堂中文字幕av | 麻豆久久久久久久 | 免费一区二区在线观看 | 欧洲精品久久久久毛片完整版 | 91国内视频在线 | 成人久久网 | 99热精品在线 | 欧美日韩一区二区三区四区五区 | 欧美一区二区三区在线观看视频 | 亚洲男人天堂 | 国产精品成人一区 | 日韩精品一区二区三区在线 | 午夜精品一区 | 国内成人免费视频 | 日韩欧美亚洲 | 成人综合视频在线观看 | 999国产视频 | 午夜精品久久久久久久星辰影院 | 日本不卡免费新一二三区 | 成人国产精品久久久 | 狠狠干美女 | 男人av在线| 亚洲一区三区在线观看 | 欧产日产国产精品v | 亚洲视频二 | 久久一区二区av | 全部免费毛片在线播放网站 | 99精品视频一区二区三区 | 日韩欧美在线观看视频 | 国产丝袜一区二区三区免费视频 | 精品不卡 | 欧美视频一区二区三区 | 亚洲国产成人久久综合一区,久久久国产99 |