質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

コードのブロックの書き方に関して

解決済

回答 6

投稿

  • 評価
  • クリップ 1
  • VIEW 2,435

score 37

C/C++などでブロックを記述するときに、
int main(){
}
と書く人と
int main()
{
}
と書く人がいます。

若い人の多くは前者の書き方をし、年配の人の多くは後者の書き方をするようなイメージがあります。

昔は後者の書き方がスタンダードだったのでしょうか?

もしそうなのであれば、なぜ前者の記述の仕方をされるように変わったのでしょうか?


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

checkベストアンサー

+4

他の方も書かれていましたが、昔は中括弧で1行占有するのが普通でした。
例えば if の後の { を if と揃えるのか、一段下げるのかで流儀有り。
その後、おそらく行数を減らす意味で、関数本体を囲む物以外は、行を占有しなくなりました。
最後に、いつの間にか、関数本体の開き中括弧も行末に移動しました。

1980年代前半にUnix上のviでCプログラムを書いてましたが、そのときどう書いていたかは忘れてしまいましたね。
関数本体の開き括弧は行頭で間違いないですが。

あ、そうだ。ANSI規格が出来る前で、そもそも、関数ヘッダが、
int main(argc, argv)
int argc;
char **argv;
{
  ・・・・・・・・・
}
という形式だったので、関数本体の開き中括弧は行頭以外はあり得ない。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/22 21:33

    懐かしい、思わずコメントしてしまいました。

    自分は、コンパイラが混在していた時代には、
    func
    #ifdef __STDC__
    (int a)
    #else
    (a)
    int a;
    #endif
    {
    ....
    }
    と書いている頃もありました。
    (今でもそのコード生きて動いてます。)

    キャンセル

  • 2015/10/22 22:31

    混在時代だと、ANSI準拠の新しいコンパイラは両方コンパイルできたので、古い形式で書いておけば十分だったのではないかと思います。
    逆は、unprotizeというコマンドで変換してました。

    キャンセル

+3

https://ja.wikipedia.org/wiki/字下げスタイル
字下げスタイルは古来いろいろ流派があり、どれからどれに主流が移りつつある、と言えるほどの時代的変遷があるとは言われていないと思います。
おそらく体感されている年配の方と若い方との違いは、観測範囲内の偶発的なゆらぎではないかと。

ただ、もしかすると後者をとっている年配の方はごく古いCのスタイル(K&R初版の記法)を由緒正しいと解釈している方々かもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

私は、K&Rの初版(英語)でC言語の勉強を始めましたから、後者のスタイルでした。

当時(1980年代前半)は、キャラクター端末(Windowsのコマンドプロンプトのように、文字しか表示できない端末装置)で1画面の大きさが80文字x24行という貧弱な環境(当然、白黒画面)でしたから、同じ高さにインデントされた"{"と"}"を見つける事でプログラムブロックの範囲が判る書き方は、非常に便利でした。

最近のエディタやIDEでは、対応する()や{}の対応がカラー表示されたり、ブロックの範囲に網掛けされたりしますから、インデントを揃えておいて対応する"}"を探すなんて必要なくなくなったのではと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/21 12:55

    狭いディスプレイのこと、ご意見うかがいたいのですが、
    行数が少ないからこそ行数を贅沢に使うK&Rスタイルは視界が狭まって読みにくかったのでは、と現代の視点から思うのですが、いかがでしたでしょうか。

    キャンセル

  • 2015/10/21 14:51

    横から失礼します。
    coco_bauerさんの書かれている内容を補足すると、昔のエディタは構文を解析したカラー表示や対応する() {}へカーソルをジャンプする等の機能がなかったので、対応する{ }を同じインデントで揃えないと、もしタイプミスで閉じ側の} が抜け落ちた場合、どこに記述ミスがあるのか探すのが大変だったということです。
    また当時は今のようにビルドがあっという間に終わるものでもなかったので(DOSプログラムでもmakeを実行して30分くらいかかるものもありました)、プログラマは結構机上デバッグをしました。ソースをプリントアウトして赤ペンを持って記述ミスを探すのですが、やはり人間の目でソースを追う場合、{}の位置はそろえた方が追いやすいということもあります。

    キャンセル

  • 2015/10/23 08:00

    なるほど、画面が狭いからこそ
    画面上での可読性より紙上での可読性こそ重要だったということですね。

    キャンセル

+2

JavaやJavaScriptだと前者です。昔のC系だと後者です。
しかし比較的最近はC系も前者を書く人が増えているように感じます。

特にJavaの場合は、Javaを造ったサンマイクロシステムズが
コーディング規約を発表し「カッコのスタイルは前者で書け」
としたので、それが広く広まったのでしょう。


「どちらが見やすいか」の議論をしばしば目にしますが、
きちんとした根拠のある主張をみた事がありません。

私はJava系なので、完全に前者です。なので後者で書かれていると非常に読みにくいです。
しかし、後者のほうが読みやすいという人もいます。
結局は「どちらに見慣れているか」や「どちらが好みか」の問題に過ぎないと思います。


>なぜ前者の記述の仕方をされるように変わったのでしょうか?

昔は単純に「K&Rスタイル」ということで、後者が多かったのだと思います。
しかしJavaが前者を公式のルールとしたので、前者で書く人が爆発的に増えた。
ざっくり言うとそんな感じだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

相当昔から、int main(){  この書き方が使われていたから年配の方はこっちがスタンダードなのです。
                 }
字下げスタイルも ファッションのように、流行するということです。
あと、
1990年代のC言語の本を図書館などで見ましたが、
だいたい、int main(){  こっちの字下げスタイルで本は書かれていました。
         }
なので、本などを見て、C言語をマスターした人は、本のソースコードをマネしたり読んだりしていって
この字下げスタイルになっていったのだと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

C/C++は後者のことが多いので、そちらに合わせます。

Javaは前者が主流ですね。


個人的には、無駄に行を消費する後者より、前者の方が好みです。
ただし、書くときは言語の流儀に合わせるようにしています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る