2012-04-24 21 views
2

私はC言語の新機能で構造体を試しています。構造体を作成した後、中括弧で再割り当てすることは可能ですか?C言語で構造体を再割り当て

直接
typedef struct { 
    int height; 
    int age; 
} Person; 

int main (void) 
{ 
    Person bill = {100,35}; 
    bill = {120,34}; // error: expected expression before ‘{’ token 
    bill = Person {120,34}; // error: expected expression before ‘Person’ 

    return 0; 
} 

答えて

8

ないが、C99はその

bill = (Person){120,34}; 

のための化合物リテラルを持っているあなたも

bill = (Person){ .height = 120, .age = 34, }; 
+0

おかげでたくさんのように指定された初期化子を使用して、物事をより読みやすく行うことができます!私のGCC(OSX GCCバージョン4.2.1)でうまく動作します。Cの亜種と新しい機能を使用することの意義についてよく分かりませんが、これが「標準」と考えられるかどうか尋ねることはできますか? – MachineElf

+0

@MachineElf C言語にはK&R C、C90、C99、C11の4種類があります。 K&R Cは事前標準化であり、他の2桁はリリースの年を表します。複合リテラルと指定された初期化子がC99に導入されました。現在のバージョンの標準はC11であり、これらの機能もサポートしています。コンパイラがこのコードを扱うことができないなら、これはCの標準に従っていません。 – Lundin

+0

ああ、素晴らしいです、ありがとう! – MachineElf

関連する問題