2012-07-17 160 views
1

未能得到詳細回答我的問題here。我以爲我會從另一個角度解決它。C99的固定寬度整數類型

會有人能夠解釋使用什麼選擇標準,用於確定底層類型C99的固定寬度的整數類型:

[u]int_fast[n]_t 
[u]int_least[n]_t 
[u]int[n]_t 

對於給定的處理器,如果「長」和「INT」是相同的大小(sizeof(int)== sizeof(long)),那麼爲什麼'long'會被用於'int',反之亦然。

+4

一個原因,這並沒有得到堆棧溢出任何注意的是,你完全忽略的C代碼(或C99標記,還是由c標記會更好)。目前的標籤並不是人們會遵循的標籤;他們在SO的定製視圖中不會看到這樣的問題。作爲一個新人,你可能不知道的細微差別,但我跟着50標籤(包括C和C99),並有一個非常高的機會,我從來沒有見過,直到你在comp.lang.c提到 - 儘管有我看了一下外面的機會,決定不回答。我重申了,省略了最不有用的兩個標籤。 – 2012-07-29 20:39:12

回答

5

<stdint.h>筆者的心血來潮。

鑑於intlong具有相同的大小(並假設它們具有相同的表示和其它特徵),它應在所有它們中的哪用於定義[u]int_{,_fast,_least}32_t沒有關係,只要一種或多種類型滿足該標準的要求。

嗯,這不是相當真實的;它在某些情況下可能會有所不同。 intlong,即使它們是相同的大小,仍然是獨特的和不兼容的類型。例如,假定int32_ttypedef ED或者作爲int或作爲long,下面的程序:

#include <stdint.h> 
#include <stddef.h> 
int main(void) { 
    int32_t *p32 = NULL; 
    int *ip = p32; 
    long *lp = p32; 
    return 0; 
} 

違反了約束,並且需要診斷上的ip上的lp聲明的聲明,這取決於如何定義int32_t。但是你應該避免寫這樣的代碼。