web-dev-qa-db-ja.com

戻り値を囲む括弧

ANSI Cコードでは、単一の戻り値を括弧で囲んでいることがよくあります。

このような:-

int foo(int x) {
  if (x)
    return (-1);
  else
    return (0);
}

それらのケースで戻り値の周りに()を使用するのはなぜですか?何か案は?その理由はわかりません。

67
Tooony

本当に理由はありません...それは古い慣習です。

スペースを節約するために、プログラマーは多くの場合、最終行を独自の行ではなく、戻り行で実行します。括弧は、次のように、返されるのが単一のステートメントであることを簡単に確認できるようにするために、大抵そこにあります。

return (x+i*2);

の代わりに

int y = x+i*2;
return y;

カッコが癖になってしまいました。

56
Adam Haile

実用的ですが、ありそうもないことですが、値の前後に括弧を付けると、returnをマクロとして定義し、すべての戻り値を監視するロギングコードを挿入できます。

47
user10392

私の個人的なスタイルは、複雑な表現がある場合は括弧を使用することです。例えば。、

return (a + b);

ただし、式が単純な用語の場合は使用しないでください。

return a;

なぜ私がそのようにするのか、私には言えません。ずっと前に拾ったものだ。

ちなみに、次のように関数呼び出しのように見せると思います。

return(a);  // ugh

信じられないほど醜く、ただ間違っています。

23

元のC仕様では、戻り値の前後にかっこが必要でした。 最近のCコンパイラとANSI C標準ではかっこは必要ありませんが、かっこの存在は戻り値に影響を与えません。それらを習慣から外す、標準に不慣れ、それらを必要とする文体の慣習との一貫性のため、またはおそらく下位互換性のためにそれらを含めます。

C++について考えている人のために、私は追加する必要があります:これ質問はCについてであり、CはC++ではありません。これらは、異なる標準、機能、難易度、および使用方法の異なる2つの異なる言語です。共通点が何であれ、それらを2つのまったく別のものとして扱うのが賢明です。 C++を対象とする同様の質問については、 returnステートメントで結果を囲む括弧は重要ですか? を参照してください。

14
rakslice

いくつかの理由があります。

  1. if/while/for/etc。括弧が必要なすべての制御キーワードです。ですから、いつでも彼らを帰国させるのは自然なことです。

  2. sizeofは、一部のケースではmustを使用することを除いて、それらを持つか持たないかのどちらかである唯一の他のキーワードです。したがって、常に括弧を使用する習慣を身に付けるのは簡単です。 sizeofの場合、これは次のロジックを意味します。可能であれば、常に実行します。

  3. case/gotoは、括弧を使用しない唯一のキーワードです。 ...そして人々はそれらを特別なケースとして考える傾向があります(そしてそれらは他の制御キーワード、特にgotoから目立つように両方とも好きです)。

13
James Antill

あなたの例のように-1を返すとき、マイナスがより見やすいので、括弧で読むとより読みやすいと思います:

return 1

または

return -1

または

return (-1)
8

多分それは習慣です-結局のところ、私たちにUnixとCをもたらした人々はMulticsプロジェクトから来ました。 MulticsはPL/Iで書かれており、PL/Iでは括弧は必須です。

4
James Jones

私はreturn wasとある種の特別な種類の関数呼び出しを考えていた少なくとも1人のプログラマーと協力してきました。

2
AShelly

かっこを使用する場合はよくあることですが、これは読みやすさのためだと思います(たとえば、Rubyは、引数を囲むかっこなしのメソッド呼び出しをサポートしますが、最近の本や記事ではそうではありません)。

2
Manrico Corazzi