簡體   English   中英

“長期無符號”在C中是否與“unsigned long”一樣有效?

[英]Is 'long unsigned' as valid as 'unsigned long' in C?

最近有一個問題是關於ULLLLU是否有效用於指定C中的無符號長long常量。我知道它們都是有效的但我認為ULL會更好,因為它匹配unsigned long long類型。

但是,我現在不太確定。 gcc編譯器允許以下內容無怨言:

int main(void) {
    unsigned int a = 1;
    int unsigned b = 2;
    return 0;
}

所以我的問題是: int unsigned ,還有其他變體,比如根據標准的long long unsigned有效類型?

ISO C11標准在6.2.5 Types

有五種標准的有符號整數類型,指定為signed char,short int,int,long int和long long int。

對於每個有符號整數類型,存在相應的(但不同的)無符號整數類型(使用關鍵字unsigned指定),它使用相同數量的存儲(包括符號信息)並具有相同的對齊要求。

但是,在該部分中沒有關於基本類型和unsigned修飾符出現的順序的任務。

控制部分稍后在標准中, 6.7.2 Type specifiers ,在此解釋:

類型說明符是voidcharshortintlongfloatdoublesignedunsigned_Bool_Complex<struct-or-union-specifier><enum-specifier><typedef-name>

每個聲明中的聲明說明符中應至少給出一個類型說明符,並在每個結構聲明和類型名稱的說明符限定符列表中給出。 每個類型說明符列表應為以下多個集合之一(以逗號分隔,每個項目有多個多集); 類型說明符可以按任何順序出現,可能與其他聲明說明符混合。

然后繼續列出所有多重集,例如unsigned long, or unsigned long int

但是重要的短語是the type specifiers may occur in any order ,這意味着所有這些對於該multiset都有效:

unsigned long
long unsigned

unsigned long int
unsigned int long
long unsigned int
long int unsigned
int unsigned long
int long unsigned

說明符的順序無關緊要。

unsigned long long  is the same as long long unsigned.  

兩種類型均符合C標准(c99)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM