C語言標準中為什麼不規定int類型的具體長度?

只是做了如下規定:

1 sizeof(short int)&<=sizeof(int)

2 sizeof(int)&<=sizeof(long int)

3 short int至少應為16位(2位元組)

4 long int至少應為32位。

為什麼不強制規定int長度呢?


因為C語言把int規定成這樣,是為了實現編譯器的人可以把int變成具體CPU的原生長度。


計算機程序設計藝術(TAOCP)裡面的1 byte= 6 bit MIX腦洞計算機。


曾經機器不牛逼,dos時代int寬度只2位元組,「640k內存對任何人都足夠用了」。

設計者也足夠高瞻遠矚,提供給後人把int寬度寫在limits.h預處理,運行時使用sizeof操作符的方式讓我們擴容。


當初機器比較弱,要儘可能節省尺寸。


因為C語言那會兒,大家還沒有大規模的編寫硬體平台無關應用的習慣。


為了源碼兼容,很多c源碼吧int當做32位。後來有了64位,如果把int變成64,很多程序要重寫。因此一般用long改成64位,也有用long long改成64位的。舊代碼裡面的long從32位改成64位,需要修改的就少很多。


本來覺得這問題沒多大意義,

不過又見半吊子在信口開河地胡扯,

只好出來說一句:

為了具有良好的可移植性,

同時也是為了實現者易於實現。


根據我看過的c++ primer和KR C都有說明,int類型作為計算機最自然的類型,速度相比其他同類類型運算速度更快。不規定大小就是為了適應各類不同機器還有同樣的效果。


因為c語言出現得很早,那時候各種各樣的平台非常多,而第一個c語言標準到1989年才公布,c語言已經有了各種各樣有區別的實現,其中就包括字長。為了儘可能包含進1989年前已有的c實現特性,就有了long&>=int&>=short&>=char的規定,再加上int儘可能是一個平台最「自然」的字長,其餘的不保證。


推薦閱讀:

MATLAB面向對象編程是什麼樣的體驗?
如何評價12月22日上線的計蒜客 "CS 212: 面向對象的程序設計 (C++)"?
為什麼程序員覺得自己學的那門語言就是最好的?
靜態方法能被兩個方法同一時刻調用嗎?
C++寫光柵化渲染器遇到些問題?

TAG:編程 | C編程語言 |