- ベストアンサー
return (0)の括弧は何故付ける
タイトルの通りです。 よく見かけるのですが、わざわざ括弧を付ける意味は 何なのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
つけちゃう派です。 つけなきゃだめ!とは思ってませんけど、つい指がreturn (と連続でタイプしてしまいます。 20年くらい前のことなので曖昧な記憶ですが、Ritchie-Cではreturn に()が必要だったと思います。 enumキーワードが無くてentryキーワードのあったバージョンです。 UNIX Version 6か7の標準コンパイラだったような… ANSI-CはRitchie-Cではなく、Portable C Compiler(Jhonson-C)の流れなので、文法がかなり変わってます。 K&R第1版は初期のJhonson-Cを元にしているので、Rithcie-Cの癖が抜けてないのでしょう。 で、私なりのこじつけ。 returnって「式を取る制御キーワード」ですね。 ifやwhile、switchと同族です。 ifやwhileの式は()で括るのに、returnだけ特例扱いするのは気持ちが悪い。 caseも制御キーワードですが、caseが取るのは式ではなく値であり、ラベルとしての要素が強いのでgotoラベルと同じように()で括らない。 別にこのこじつけで「絶対に()をつけよう!」と主張しているのではなく、()をつけることで統一されたソースに対してお客さんから「何で()つけてるの?」と質問されたときの対応用です。 テスト済みのソースを修正したくないので… 基本的に統一されていればどっちでもオッケーでは?と思ってます。
その他の回答 (3)
- Fooky
- ベストアンサー率71% (59/82)
別に意味無いんじゃないですか?でも,付ける派の自己分析を少し. 私は昔は付けなくていいことを知らなくて付けてました.知ってからはしばらく付けなかったんですが,また付けるようになりました. というわけで,理由というか原因はいくつかあると思います. 1.付けなくていいことを知らない 2.昔知らなかったときの癖で付けている しばらく付けなかったときのことを思い出してみると,付けないとなんか気持ち悪いんですよね.過去の私を含め勘違いする人がいるくらいに,return文てすごく呼出しに似てるじゃないですか.だから書き方が統一されてないと落ち着かない.美しくないと感じる. 3.呼出しとの統一感 見やすい/見にくいも主観に過ぎないですが,括弧が無いとワードと値の境界が分かりにくく感じる.特に戻り値が複雑な式になった場合. 4.区切りとして括弧を入れている あと,余分な括弧を入れるのに抵抗があるか無いか,という個人的特性が下地としてあるんじゃないでしょうか.出来るだけシンプルに書きたい人もいるでしょうし,入れていい括弧なら好きなように入れればいいじゃないか,という人もいるでしょう.私は後者で冗長な括弧をよく使います.*p++を*(p++)と書いたり,(で長い式をインデントさせまくったり. 要は,気持ちの問題ではないかと. ああ,あと,昔覚えた言語の癖,という仮説も考えたんですが,私がかじった言語にはreturnに()が必要な言語はありませんでした.
括弧をつけるのはあいかわらず謎ですが return (0) をタイプミスすると コンパイルは通ってしまいます。 警告くらいは出ますが。 で、リンクの段階になるまでミスが発覚しない。 括弧を付けないとコンパイルの段階でエラーになります。 よって付けない方がまし。
古い人はわざわざ括弧をつけたがりますね。 K&Rの第1版では括弧が付いていたからみたいです。 昔の処理系は括弧をつけないといけなかったんでしょうかね? 括弧をつけてタイプミスするとそんな関数無いよエラーになるので私は付けません。
お礼
arrowrootさん、解答有り難う御座います。 >括弧をつけてタイプミスするとそんな関数無いよエラーになるので私は付けません。 うろ覚えですが昔、「括弧をつけてタイプミスするとそんな関数無いよエラーになるので括弧を付ける」というのを どっかで見たような気がします。たかが、returnの タイプミス検出のために括弧を付けるのは本当? と思ったのが今回の質問の裏の事情でもあります。 >昔の処理系は括弧をつけないといけなかったんでしょうかね? これは本当でしょうか。識者の解答を待ちたいと思います。