1

関数、クラス、条件分岐などのエンティティを分離するために使用されることは知っ{}ていますが、ここで他にどのような用途がありますか?

#import <stdio.h>

int main(void) {
    {{{
        printf("main\n");
    }}}
    return 0;
}

編集:

ネストされた関数とともに、主に情報の隠蔽に役立つ可能性があることがわかりました。以下の回答から、デバッグ中にマーカーとして使用でき、リリースで削除できるように見えますが、これは承認されるべきではありません。

4

4 に答える 4

5

コードを中かっこで囲むと、 Scope{ }が作成されます。 ローカル スコープの作成には、次のようないくつかの理由があります。

  • 囲んでいるスコープで変数名を再利用できます。
  • 関数の途中で変数を定義します。
    スコープの先頭以外の場所に変数を作成することは、c89 では許可されていませんでしたが、c99 以降では許可されています。

オンラインのサンプル コード サンプル:

#include<stdio.h>

int main()
{
    int i = 10;
    {
         int i = 5;
         printf("i is [%d]\n",i);
    }
    printf("i is [%d]\n",i);

    return 0; 
}

あなたのコード例で
は、余分な{&}は何の目的も果たしません。それらは冗長なコードです。

@Martin がコメントで示唆しているように、コードを{{{&で囲むのは&}}}と似ているため、簡単に検索できるようにタグ/パターンとして使用できます。{}

ただし、個人的には、そのような冗長なコードを追加するよりも、検索に表示されるキーワードでコードに適切なコメントを追加することを好みます。

于 2012-01-27T03:50:13.463 に答える
2

その構文 (連続する 3 つの中かっこ) は、標準 C で特別なことを意味するものではありません。そのようなコードの作成者は、それを使用して、内部のコードについて何かを示すことができます。たとえば、デバッグのためにあるだけです。

于 2012-01-27T03:50:37.943 に答える
2

新しいスコープを導入すると、新しい変数を導入できます....これはC89で役立ちます。あまりにも普通ではありませんが、時々役に立ちます。

{
  int x =2 ;
  printf("%d", x);
  {
    int y = 7;
    printf("%d", y);
  }
}
于 2012-01-27T03:54:44.173 に答える
0

Alsが述べたように、追加のブレースはスコープを提供します。これは、スマートポインタの場合に効果的に使用できます。たとえば、C++ (MSVC コンパイラ) で次のコードを検討してください。

int i = 0;
i++;
//More code follows 
...

{
    CComBSTR bstr("Hello");
    //use this bstr in some code
    .....
}

エンドブレース以降はbstrご利用いただけません。さらに、スコープ外になっているため、デストラクタも自動的に呼び出されます。

于 2012-01-27T03:54:12.963 に答える