10

最近、C で unsigned long long 定数を指定するのに有効かどうかについて質問がありましたどちらも有効であることは知っていますが、 type と一致するため、それが望ましいと考えていました。ULLLLUULLunsigned long long

しかし、私は今、それほど確信が持てません。gccコンパイラは、次のことを問題なく許可しました。

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

だから私の質問は次のとおりです。 int unsigned、および のような他のバリエーションはlong long unsigned、標準に従って有効なタイプですか?

4

2 に答える 2

16

ISO C11 標準は次のように述べてい6.2.5 Typesます。

signed char、short int、int、long int、および long long int として指定される 5 つの標準の符号付き整数型があります。

各符号付き整数型には、対応する (ただし異なる) 符号なし整数型 (キーワードunsignedで指定) があり、同じ量のストレージ (符号情報を含む) を使用し、同じ配置要件があります。

ただし、そのセクションには、基本タイプと修飾子が表示される順序に関する義務はありません。unsigned

制御セクションは、標準の後半にあり、6.7.2 Type specifiersここで言い換えられています。

型指定子は、、、、、、、、、、、、、、、およびです。void_ char_ short_ int_ long_ float_ double_ signed_unsigned_Bool_Complex<struct-or-union-specifier><enum-specifier><typedef-name>

各宣言の宣言指定子、および各構造体宣言と型名の指定子修飾子リストに、少なくとも 1 つの型指定子を指定する必要があります。型指定子の各リストは、次のマルチセットのいずれかになります (項目ごとに複数のマルチセットがある場合は、コンマで区切ります)。型指定子は任意の順序で発生する可能性があり、他の宣言指定子と混在する可能性があります。

次に、 などのすべてのマルチセットを一覧表示しunsigned long, or unsigned long intます。

しかし、そこにある重要なフレーズはです。これは、これらすべてがそのマルチセットに対して有効であることをthe type specifiers may occur in any order意味し ます。

unsigned long
long unsigned

unsigned long int
unsigned int long
long unsigned int
long int unsigned
int unsigned long
int long unsigned
于 2013-06-25T01:57:06.387 に答える
0

指定子の順序は重要ではありません。

unsigned long long  is the same as long long unsigned.  

どちらの型も C 標準 (c99) に従って有効です。

于 2013-06-25T02:07:05.977 に答える