代わりにこれを使用してください:
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ます。