• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[C言語] main() の後ろ "{"の場所は?)

[C言語] main() の後ろ「{」の場所は?

このQ&Aのポイント
  • C言語のプログラムにおいて、main()関数の後ろの「{」の位置について、2つのパターンがあります。
  • パターン1では、main()関数の後ろに直接「{」を書く方法です。
  • パターン2では、main()関数の後ろに改行し、「{」を新しい行に書く方法です。どちらを選ぶかは、プログラムの書きやすさや読みやすさに影響を与えます。

質問者が選んだベストアンサー

  • ベストアンサー
noname#252332
noname#252332
回答No.1

私は1で書いていましたね。古い話ですが。短い時は1行にってこともよくやっていました。でもK&Rは2だと言っていますね。もちろんどっちでもいいんでしょうけど。K&Rのあとでは、ANCIのCではこう書くんだ、という声を聞いたものでしたがWikipediaでは触れられていませんね。 http://ja.wikipedia.org/wiki/%E5%AD%97%E4%B8%8B%E3%81%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB

sukeken
質問者

お礼

こんにちは。 たまたま見ていた本が、パターン1でした。 こういうの、おもしろいですね。 ありがとうございました。

その他の回答 (7)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.8

あんまり確かな記憶じゃないんだけど, ある行が空白も何もおかずいきなり { から始まっていたらそこを関数定義の開始とみなす (逆に, 構文上は関数定義の開始であっても行頭になければ無視する) というプログラムがあったような気がする. オリジナルの ctags がそうだったっけ?

sukeken
質問者

お礼

こんにちは。 そんなものがあったんですね~。 と言うことは、パターン2ってことでしょうか? わかりやすいと言えば、わかりやすい。 ただ、行が余分に掛かってしまいますけど。 やっぱおもしろいですね。 ありがとうございました。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.7

あままりやると宗教戦争っぽくなるパターンですね。 まぁあるときどき出てくるネタですが。 私は#5さんが上げているスタイルですね。 関数の場合は開始位置は行頭に。 if文やwhile文、for文などの場合は行末(閉じるのはインデント揃えた行頭に)というタイプです。 # 構造体定義も行末…でしたな。 もっとも…最近はC#触ることの方が多いので、VisualStudio任せです。 # んで、#region~#endregionで閉じるとか使いまくりです。

sukeken
質問者

お礼

こんにちは。 任せるってのも、ありなんでしょうね。 V.S.2012は、全てが行頭になっている感じ…ですけど、テンプレとして”その後入力してね”だと、この方がわかりやすいのかなぁとも。 ありがとうございました。

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.6

昔(1980年代)はパターン2しかありませんでした。 ifやforやwhileのあとの { は改行して行頭に書くのか、改行せずに行末に書くのかが論争になっていましたが、そのときでも関数定義に関しては、パターン1は全く見かけない。 何故かというとANSI-Cの規格ができる前のオリジナルのC文法では、関数の頭書きは、 int main(int argc, char **argv) でなく、 int main(argc, argv) int argc; char **argv; のように書いていたので、その後に { を書くとどうしても改行してになってしまいます。 その後、if/for/whileに関しては、行末に書くのが普通になってきたので、ANSI-Cの関数定義もそれと同じ形式で行末に書く書き方が出てきたようです。 1.すべて { は改行して行頭に書く 2.関数定義の { だけ改行して、それ以外は行末に書く 3.すべて { は行末に書く のどれかにルールを決めて統一すれば良いでしょう。わたしは昔は2.で今は3.

sukeken
質問者

お礼

こんにちは。 すべて文末…、そう決めてしまえば良いんですよね、きっと。 VisualStudio2012は、行頭みたいな感じなので、乗っかるんなら行頭と言うことになるのか…。 楽しみながら、悩んでみようと思います。 ありがとうございました。

回答No.5

C言語の元祖のK&R本では確か、関数は下の方の表記、if分は上のようになっていたと思いますので、今でもその習慣になっている人はそれなりに多いと思います。 main() { ///// } if (xxx) { /// } else { /// } Cよりも前から教育用として使われていたPascalでは{}ではなく、begin~endでくくりますが、このとき手続きの時はbeginの位置が1行下、if文は if(xxx) then begin end; という具合になっていた名残かもしれませんね。

sukeken
質問者

お礼

こんにちは。 VisualStudio2012で、サンプル作ってみたら if (ar.IsStoring()) { // TODO: 格納するコードをここに追加してください。 } else { // TODO: 読み込むコードをここに追加してください。 } こんなが出てきました。 やっぱ面白いですね。 ありがとうございました。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.4

どっちもおなじ みかけのちがいだけ どこにもえいきょうしない

sukeken
質問者

お礼

こんにちは。 影響というのは、if文の時とか…と言う意味でした。 影響と言うより、意識でしょうか。 ありがとうございました。

  • NNori
  • ベストアンサー率22% (377/1669)
回答No.3

C言語は、どちらもOKなのは、ご認識かと思います。 で、どちらのスタイルが好まれるか、という話ですよね。 1のほうが行数が少ないのでコンパクトに見える。 2のほうが他の言語に近いスタイルをしている。 ということではないでしょうか? 例えばVisualBasicで if else elseif は頭の位置を揃えます。 それと同じようにしたければ、{}の位置を揃えたほうがわかりやすいかな、と思います。 というわけで、私は2の方ですね。

sukeken
質問者

お礼

こんにちは。 好み、確かにそうなのかもしれません。 2ですね。なるほど…。 ありがとうございました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

これらは、「字下げスタイル」とか言われるもので、それぞれに利点、欠点があります。 http://ja.wikipedia.org/wiki/%E5%AD%97%E4%B8%8B%E3%81%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB 「チームやコミュニティ等で、共通の規則があるなら、それに合せる」 が原則です。一番大事なのは、統一する、ということです。 個人的には、パターン1を使ってます。K&Rから入った影響だと思います。

sukeken
質問者

お礼

こんにちは。 どっちもどっち…でしょうか? で、統一ですね。 ありがとうございました。

関連するQ&A

専門家に質問してみよう