只是一種約定。
這種約定在今天看來稍微有點問題,這其中有一些歷史原因。C語言在很長的一段時間內都沒有明確的bool型別,而是簡單規定零值為假,其他值一律為真。包括指標型別為0也算假。
直到C99標準才明確提出了bool型別,這之前都沒有。
真、假判斷太太太常用了,每一句if都包含了一次真假判斷。而基本數值型別和指標型別是最基本最常用的型別,所以C語言靈活地規定0表示假,其它值為真。這種規定相對來說容易理解,不太容易造成問題。
我覺得就算再回到當年,在當時的背景下也很難想出一種更好的規定方法了。
脫開歷史原因只在今天的角度來看,這種規定的弊端也很嚴重,因為false是唯一的,而true是不唯一的。一個條件為真,不能假定該判斷用的變數就是1。所以在int與真、假轉換的時候,思路不清容易造成BUG。而且確實有一些BUG就是這個原因導致的。
現代語言會盡可能避免直接拿int做邏輯判斷的寫法。(但例外情況也很多,曾經也被Python坑過:) )
PS : 看了whinc的回答十分贊同,也想補充一下。int用於判斷結果的約定還有其它情況:
所以你看,都是約定和習慣而已。
只是一種約定。
這種約定在今天看來稍微有點問題,這其中有一些歷史原因。C語言在很長的一段時間內都沒有明確的bool型別,而是簡單規定零值為假,其他值一律為真。包括指標型別為0也算假。
直到C99標準才明確提出了bool型別,這之前都沒有。
真、假判斷太太太常用了,每一句if都包含了一次真假判斷。而基本數值型別和指標型別是最基本最常用的型別,所以C語言靈活地規定0表示假,其它值為真。這種規定相對來說容易理解,不太容易造成問題。
我覺得就算再回到當年,在當時的背景下也很難想出一種更好的規定方法了。
脫開歷史原因只在今天的角度來看,這種規定的弊端也很嚴重,因為false是唯一的,而true是不唯一的。一個條件為真,不能假定該判斷用的變數就是1。所以在int與真、假轉換的時候,思路不清容易造成BUG。而且確實有一些BUG就是這個原因導致的。
現代語言會盡可能避免直接拿int做邏輯判斷的寫法。(但例外情況也很多,曾經也被Python坑過:) )
PS : 看了whinc的回答十分贊同,也想補充一下。int用於判斷結果的約定還有其它情況:
如果只有真、假區別的時候,0為假。如果有成功、以及各種各樣不同的失敗情況的時候,0為成功,失敗原因用非零的數字表示。(常見於網路請求中)如果有多種成功訊息,以及多種失敗訊息的時候,正數為成功,負數為失敗。所以你看,都是約定和習慣而已。