int類型的變量被稱爲「一個機器類型的字長」 但在嵌入式系統中,8位微的C編譯器使用16位int(8位無符號字符),然後獲取更多位, INT行爲正常: 在16位微位int也是16位,並在32位微位int是32位等。有沒有標準的方法來檢測硬件的位寬?
那麼,有沒有一個標準的方式來測試它,像BITSIZEOF(INT)?
像「sizeof」是爲字節,但爲位。
,這是我的第一個想法
register c=1;
int bitwidth=0;
do
{
bitwidth++;
}while(c<<=1);
printf("Register bit width is : %d",bitwidth);
但是這需要C作爲int和它的8個編譯器是常見的INT 16位使用,所以它給了我16的結果,似乎也沒有標準使用「int」作爲「註冊寬度」,(或不尊重)
爲什麼我要檢測它?假設我需要許多變量,它們需要少於256個值,因此它們可以是8,16,32位,但是使用正確的大小(與內存和寄存器相同)會加快速度並節省內存,如果不能在代碼決定,我必須重新編寫函數爲每建築
編輯閱讀答案 後,我發現這個好文章
http://embeddedgurus.com/stack-overflow/category/efficient-cc/page/4/
我引用的結論(加粗體)
因此 的底線是這樣的。如果你想 開始編寫高效的,便攜的 嵌入代碼,你應該採取的第一步是開始使用C99 數據類型'最少'和'快'。如果您的 編譯器不符合C99,則 抱怨,直到它或 - 更改 供應商。如果您進行此更改I 認爲您將會驚喜 您的代碼大小和 速度將得到改進。
使用像char,int,short這樣的類型是不好的做法,應該被嵌入式系統禁止。我見過一個編譯器(CodeWarrior),它允許你改變每種類型的長度。只要使用types.h頭文件即可。 – kmalmur 2010-07-27 17:59:15