1

私は最近、私の仲間のプログラマーの1人が次のようなものを書いているのを見つけました。

int foo()
{
    //some code
    {
        //some code
    }
    //some code
    {
        //some code
    }
    //some code
}

ご覧のとおり、カーリングブレースの2つの内側のペアは、コードの2つのブロックを論理的に分離するためにのみ機能します。私はしばらくの間Cを書いてきましたが、そのようなスタイルを見たことがありません。これは良い、または少なくともCで受け入れられるスタイルと見なされますか?

4

6 に答える 6

9

これは特に良いスタイルではないと思います。インデントが過剰に増加し、行のスペースが少なくなり、並行して読みやすさが低下します。複数の「ロジックモジュール」がある場合は、次のように空の行を使用してそれらを分離できます。

/* declarations */
char *str;
size_t size;

/* allocate memory */
size = 16;
str = malloc(size);
if (str == NULL) {
    return -1;
}

/* do actual task */

または、コードのチャンクが大きい場合は、コードをリファクタリングして、別々の関数に分割することを検討する必要があります。

于 2012-11-13T06:25:53.183 に答える
2

これは多くの場合、変数の範囲を制限するために行われ、プログラムが使用するメモリを少なくすることができます。

編集:@DCoderが指摘しているように、あなたのコンパイラは最近これを不要にする可能性が高く、おそらくあなたの友人はそれがもっと必要になったときに彼がずっと前に学んだ技術を使用しています。

于 2012-11-13T06:24:48.410 に答える
2

中かっこはネストされたスコープを導入します。たとえば、同じ変数名を再度使用できます。実際には必要ありません。コーディングが不十分で、コードを読む人を混乱させると思います。

int foo()
{
    int a;
    //some code
    {
        int a;
    }
}
于 2012-11-13T06:26:34.787 に答える
2

一般的に、これは良いスタイルではありません。また、内部スコープ内で変数を宣言しても、スタックの使用効率が向上することはありません(すべきではありません)。適切なコンパイラーであれば、それを最適化できます。どこでも変数宣言を可能にするC++が90年代初頭に普及して以来、彼らはそうすることができました。

ただし、内部スコープ内で変数を宣言すると、他のスコープの「名前空間の汚染」が減少します。経験則として、変数は、それが使用されるスコープにのみ表示されることが望ましいです。

このため、私の意見では、中括弧が良いスタイルと見なされるいくつかの例外があります。最も明白なケースは、C90のswitchステートメントです。

switch(x)
{
  case 1:
  {
    /* now you can declare local variables here */
    int my_local;

    break;
  }

  case 2:
  {
    int some_other_local_only_related_to_case_2;

    break;
  }
}
于 2012-11-13T08:47:49.913 に答える
1

それらの中括弧の数を低く保つなら、それは大丈夫です、私はそれをしました。

しかし、今では、コードを名前/説明を含む小さな関数に分割すると思います。それははるかに良い方法です。

于 2012-11-13T06:41:54.860 に答える
1

{}に入れるコードがそれ自体で成り立つ場合は、たとえそれがvoid関数であっても、そのコードを関数に入れる価値があるかもしれません。そうすれば、その関数で使用される変数の名前空間が制限され、コードをより管理しやすい部分に分割できます。私はコードを整理し、読みやすく、保守しやすいようにするために、常にこれを行っています。

于 2012-11-13T08:55:14.833 に答える