ANSI Cコードでは、単一の戻り値を括弧で囲んでいることがよくあります。
このような:-
int foo(int x) {
if (x)
return (-1);
else
return (0);
}
それらのケースで戻り値の周りに()を使用するのはなぜですか?何か案は?その理由はわかりません。
本当に理由はありません...それは古い慣習です。
スペースを節約するために、プログラマーは多くの場合、最終行を独自の行ではなく、戻り行で実行します。括弧は、次のように、返されるのが単一のステートメントであることを簡単に確認できるようにするために、大抵そこにあります。
return (x+i*2);
の代わりに
int y = x+i*2;
return y;
カッコが癖になってしまいました。
実用的ですが、ありそうもないことですが、値の前後に括弧を付けると、returnをマクロとして定義し、すべての戻り値を監視するロギングコードを挿入できます。
私の個人的なスタイルは、複雑な表現がある場合は括弧を使用することです。例えば。、
return (a + b);
ただし、式が単純な用語の場合は使用しないでください。
return a;
なぜ私がそのようにするのか、私には言えません。ずっと前に拾ったものだ。
ちなみに、次のように関数呼び出しのように見せると思います。
return(a); // ugh
信じられないほど醜く、ただ間違っています。
元のC仕様では、戻り値の前後にかっこが必要でした。 最近のCコンパイラとANSI C標準ではかっこは必要ありませんが、かっこの存在は戻り値に影響を与えません。それらを習慣から外す、標準に不慣れ、それらを必要とする文体の慣習との一貫性のため、またはおそらく下位互換性のためにそれらを含めます。
C++について考えている人のために、私は追加する必要があります:これ質問はCについてであり、CはC++ではありません。これらは、異なる標準、機能、難易度、および使用方法の異なる2つの異なる言語です。共通点が何であれ、それらを2つのまったく別のものとして扱うのが賢明です。 C++を対象とする同様の質問については、 returnステートメントで結果を囲む括弧は重要ですか? を参照してください。
いくつかの理由があります。
if/while/for/etc。括弧が必要なすべての制御キーワードです。ですから、いつでも彼らを帰国させるのは自然なことです。
sizeofは、一部のケースではmustを使用することを除いて、それらを持つか持たないかのどちらかである唯一の他のキーワードです。したがって、常に括弧を使用する習慣を身に付けるのは簡単です。 sizeofの場合、これは次のロジックを意味します。可能であれば、常に実行します。
case/gotoは、括弧を使用しない唯一のキーワードです。 ...そして人々はそれらを特別なケースとして考える傾向があります(そしてそれらは他の制御キーワード、特にgotoから目立つように両方とも好きです)。
あなたの例のように-1を返すとき、マイナスがより見やすいので、括弧で読むとより読みやすいと思います:
return 1
または
return -1
または
return (-1)
多分それは習慣です-結局のところ、私たちにUnixとCをもたらした人々はMulticsプロジェクトから来ました。 MulticsはPL/Iで書かれており、PL/Iでは括弧は必須です。
私はreturn wasとある種の特別な種類の関数呼び出しを考えていた少なくとも1人のプログラマーと協力してきました。
かっこを使用する場合はよくあることですが、これは読みやすさのためだと思います(たとえば、Rubyは、引数を囲むかっこなしのメソッド呼び出しをサポートしますが、最近の本や記事ではそうではありません)。