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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

6回答

3788閲覧

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

m0Rya

総合スコア37

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2015/10/21 03:07

C/C++などでブロックを記述するときに、

int main(){ }

と書く人と

int main() { }

と書く人がいます。

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

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

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

あ、そうだ。ANSI規格が出来る前で、そもそも、関数ヘッダが、

C

1int main(argc, argv) 2int argc; 3char **argv; 4{ 5 ・・・・・・・・・ 6}

という形式だったので、関数本体の開き中括弧は行頭以外はあり得ない。

投稿2015/10/21 12:43

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShinyaAnan

2015/10/22 12:33

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

2015/10/22 13:31

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

0

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

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

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

投稿2015/10/21 03:50

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuba

2015/10/21 03:55

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

2015/10/21 05:51

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

2015/10/22 23:00

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

0

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

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

投稿2015/10/21 03:14

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

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

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

投稿2015/10/21 06:22

miu_ras

総合スコア902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

Javaは前者が主流ですね。

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

投稿2015/10/22 13:16

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2015/10/21 04:10

編集2015/10/21 04:12
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問