2016-10-12 2 views
1

に構造体を初期化します。Cは、だから私は私のコードでは、以下の「形状」を持つスイッチケース

mystruct t; 
switch(something){ 
    case THIS: 
     t = {/*initialization*/}; 
     break; 
    case THAT: 
     t = {/*initialization*/}; 
     break;   
    case AND_THE_OTHER: 
     t = {/*initialization*/}; 
     break; 
} 

gcc{前の式があるべきと主張している:

error: expected expression before '{' token 
    t = { 
     ^

なぜ? gccは私が何をしていると思いますか?これを行うためのきれいな方法は何ですか?

答えて

2

あなたがしていることは、割り当てであり、初期化ではありません。初期化は、変数が定義された時点でのみ実行できます。中括弧は変数の初期化に使用できますが、割り当てはできません。

構造体の各メンバーを個別に割り当てる必要があります。

2

使用compound literals

t = (mystruct) { ... }; 

これはC99 +によってサポートされていますが、C90のためのGCCによって拡張機能としてサポートされています。

+0

ありがとうございました。残念ながら、私はC89で作業する必要があります。私にとって便宜ではありません:( –

+0

@HermanGhandi OK、残念ですが、もし私が尋ねることができるのであれば、なぜC89を使う必要がありますか?それはまったく時代遅れです – Downvoter

+0

大学のコンピュータはそうです。グレーダーが使用したり好きではないかもしれないフラグを付けてください。 –

関連する問題