アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語のwhile()文の書き方で大カッコ{}がついていたりいなかったりするものを見かけるのですが、下記の例はどうして同じ意味に解釈されるのでしょうか?

例1
while ((c = getch()) != EOF) {
if (c == '*')
if ((c = getch()) == '/')
break;
else
ungetch(c);
}

例2
while ((c = getch()) != EOF)
if (c == '*')
if ((c = getch()) == '/')
break;
else
ungetch(c);

A 回答 (2件)

C言語の文法では次のようになっています。



while(式) 文

if (式) 文1 else 文2

ここで、文というのは、ざっくり次のものです。
・式 ; の形をしたもの (空の式、つまり ; だけ、というのも含む)
・while ,if.for等の制御文

ただ、これだと複雑なプログラムが書けないので、次のルールも追加されます
・{ } で囲まれた複数の文は、「1つの文」と同じ扱いにする


if (c == '*')
if ((c = getch()) == '/')
break;
else
ungetch(c);


 式: c == '*'
 文1: if ((c = getch()) == '/') break; else ungetch(c);
とした、1つのif文です。

これを{}で囲めば「一つの文」という扱いになります(もともと一つの文ですが)

上の方は、{}で囲んで一つの文にしたもの。
下の方は、もともと一つの文だから、{}を使わないでそのまま文として指定したもの。
となります。
    • good
    • 0

以下5行のプログラム



if (c == '*')
if ((c = getch()) == '/')
break;
else
ungetch(c);

が1文だからです。

2文以上は大カッコ{}でくくって1文になり(意味が変わる)ますが、
1文は大カッコ{}でくくっても1文のまま(意味は変わりません)です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!