2012-04-07 11 views
1

私はこの(GCCコンパイラ)コンパイル:無名のデータ変数をintとして取られたときにそれが必要とされるのはなぜ「」指定修飾子リストが必要なのはなぜですか?

前に指定-修飾子リストを期待

:だっ示し

#include <stdio.h> 

main() { 

    struct { 
     a:1; 
     b:2; 
    } t; 

    t.b=6; 
    t.a=2; 
    printf("%d %d",t.a,t.b); 
} 

がエラーをデフォルトでは説明してください...

+0

"名前のないデータ変数はデフォルトでintとして扱われます":C言語の非常に古いバージョンのようです。 '-Wall'を使ってプログラムをコンパイルすると、' 'main''の"慣習的でない "宣言に対する警告を受け取るべきです。 –

+0

あなたのコードに関するコメント: 'main()'は 'int main(void)'でなければなりません。通常、 'unsigned'として宣言されるべきです。 't.b'と' t.a'に割り当てる値は、必ず保持できる値の範囲外です。 –

答えて

1

これはC language standardで必要です。セクション6.7.2.1によれば、一部4:

bit-のfi ELDはクアリのfi ED又は_Boolのunqualiのfi EDバージョンであるタイプを有するものと、int型、unsigned int型、またはいくつかの他の実装ドFiのNEDタイプに署名しました。

関連する問題