代わりにこれを使用してください:
char *y;
if(x == 's') y = "sauve";
else y = "hi";
printf("%s",y);
y
ステートメント内ではなく前に宣言することで、スコープif
を拡張しています。y
そして、ここではブレースは必要ありません。
編集:(エリックとカールのコメントから)
if (x == 's') char y[] = "sauve";
else char y[] = "hi";
printf("%s",y);
C 文法では、宣言はステートメントではありません。の構文if
はif (expression) statement [else statement]
. 中かっこのない if 内の単一の「ステートメント」は、ステートメントでなければなりません。宣言ではない場合があります。これは、ブレースで囲まれた block-item-listである複合文にすることができ、block -item-listは宣言であるか、宣言を含むことができます。
したがって、ここでの宣言は純粋に違法です。中括弧なしで宣言y
することはできません。if-statement
しかし、中括弧を追加すると:
if (x == 's') { char y[] = "sauve"; }
else { char y[] = "hi"; }
printf("%s",y);
ここでは理論的には合法ですが、新しい問題があります... の宣言はスコープy
にバインドされています。{ ... }
タイプ : のエラーが行に表示error: use of undeclared identifier 'y'
されprintf
ます。