1. ホーム
  2. c

[解決済み] C言語で使用されるブラケットとその目的

2022-02-09 19:20:13

質問

以前にも質問されていたら申し訳ないのですが、私はC言語初心者で、どなたか () の括弧は、次のコードにあります。

オンラインのチュートリアルから取ったもので、問題なく動きますが、1つだけ理解できない部分があります。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int age;
    printf("Please enter the age");
    scanf("%d", &age);
    if (age > 18 /*condition */ ) {
       printf("You may enter the club");
       if (age < 21)
       {
        printf("The age is greater than 18 but less than 21");

    }    else
        (printf("The age is greater than 18 and greater than 21"));


} else if (age == 18)
{
    printf("The age is equal to 18");
}
else {
    printf("The age is not greater than 18");
    }

return 0;
}

私が見たところ、丸括弧はif文の条件を入れるのに使われ、中括弧はその条件に続く操作を記述するのに使われているようです。 ただし、太字のネストされたelse条件は、else文の後に丸括弧でprintコマンドを囲んでいます。

なぜそうなるのか、どなたか説明してください。

解決方法は?

丸かっこ () (中括弧と同じように {} は、いくつかの異なる文脈で登場し、異なる役割を果たすことがあります。

の中のカーリーブラケット if は、ほとんどの場合、複数のステートメントを1つにまとめる必要があります。 複合 の真偽の分岐として機能します。 if . あなたの場合、例えば、各ブランチが if (age < 21) はすでに1つの文であり、その枝の中の中括弧は実際には必要ないことを意味します。つまり if として

if (age < 21)
  printf("The age is greater than 18 but less than 21");
else
  printf("The age is greater than 18 and greater than 21");

のtrueブランチを同時に作成します。 if (age > 18) は複数のステートメントを含むので、そこに中括弧が必要なのです。

一方、丸括弧で囲まれた if 条件は、単なる構文要素である if 文 - 文法では、丸括弧で if の中で丸括弧を要求するのと同じように、条件も丸括弧を要求します。 for , while 関数呼び出しなどの構文があります。

しかし、丸括弧はまったく別の役割でも使われます。 (2 + 2) * (5 - 3) . ただし、式の中では、冗長な括弧を自由に使うことができます。 (((2))) + (3) の代わりに 2 + 3 . また、式全体を囲む余計な括弧を追加することもできます。 (((2 + 3))) の代わりに (2 + 3) といった具合です。

これは、あなたの例で観察されることと全く同じです。あなたの

printf("The age is greater than 18 and greater than 21");

は単なる式文、つまり一つの式からなる文です。その式は printf . もし望むなら、その呼び出しを任意の数の冗長な丸括弧で囲むことができます。

(((printf("The age is greater than 18 and greater than 21"))));

であり、その意味は変わらない。

が本当に必要ないこと、この2つの要素が組み合わさった結果です。 {} その周りに printf をいくつでも置くことができます。 () その周りに printf を好きなように設定することで、あたかもその printf のペア {} はなぜか 置き換え を1組の () . 実際には、この2つは全く関係のない動作です。

いずれにせよ、これは単なる構文的な好奇心であり、実用的な価値を持つものではありません。チュートリアルのコードではどうなっているのか、それは誰にもわからないことです。