假設我想編寫一個C程序(C99或C2011),我希望它是完全可移植的,而不是綁定到特定的體系結構。C中的整數類型
看來,我會那麼想從舊的整數類型(int
,long
,short
)和朋友一刀兩斷,並使用只有int8_t
,uint8_t
,int32_t
等(也許使用的least
和以及fast
版本)。
然後是main
的返回類型是什麼?或必須我們要與int
?標準要求是否爲int
?
GCC-4.2讓我寫
#include <stdint.h>
#include <stdio.h>
int32_t main() {
printf("Hello\n");
return 0;
}
,但我不能使用uint32_t
甚至int8_t
因爲那時我得到
hello.c:3: warning: return type of ‘main’ is not ‘int’
這是因爲一個typedef,毫無疑問的。看起來這是一種情況,我們不得不使用未指定的大小類型,因爲它不是真正的可移植的,除非我們將返回類型留給目標架構。這個解釋是否正確?在代碼庫中只有一個普通的舊版本int
似乎很奇怪,但我很樂意實用。
使用'int'作爲'main()'的返回類型,你會發現什麼樣的可移植性問題? – JasonD 2013-02-12 14:52:02
從任何機器上編譯的意義來說,int都是可移植的。現在,如果你說要嘗試返回12344567891233445567,那麼你會遇到問題,但讓我們老實說,你最後一次這樣做了嗎?所有返回的數字都應該相當小。例如錯誤代碼。 – 2013-02-12 14:53:39
我意識到在這種情況下使用'int'使得程序可移植,而在其他地方,似乎可移植性要求使用固定大小的類型。也許這只是一個必要的不對稱。 – 2013-02-12 14:54:42