2011年12月1期プログラム19: なぜC+のmain関数はどのクラスにも属していないのか (69) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
20: くだすれPython(超初心者用) その12 (136)
21: C#, C♯, C#相談室 Part69 (8)
22: ●●●●TCL/TKなら俺に聞け 2●●●● (845)
23: 懐かしのMS-DOSプログラミング (315)

なぜC+のmain関数はどのクラスにも属していないのか


1 :10/05/16 〜 最終レス :11/12/09
語る

2 :
2ゲット
またC系の新言語か。

3 :
もうアイちゃん
糞スレは立てちゃだめって言ったでしょ

4 :
答えは簡単。
C++は過去のシガラミを引きずっているから

5 :
逆になぜ属する必要があるんだ?
アプリケーションのエントリーポイントなんてグローバルに一つあれば十分じゃん。

6 :
C#やJavaはグローバルな関数を作れないから
仕方なく属しているだけ
C++はCとの互換性を無視してまで無理に属させる必要も無い
終了

7 :
>>6
仕方なくである必要ないだろ。
グローバル関数は害悪だ。
だからこそ属す必要がある。

8 :
このスレッドは天才pンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

9 :
Java厨がほざいてるならまだ分かるがなぜC++なんだ?
と思ったらC+とかいう俺の知らない言語だった

10 :
mainはグローバルに置く方が自然だよ
JavaやC#ではエントリポイントを持つためだけの意味のないクラスを作ったりする
文法上の制限でクラスに属さないといけないだけ

11 :
新言語C+のことは知らないけど
C++はプリプロセッサで実装されていた時代の都合による

12 :
>>10
だったらmain()を持ったクラスを作らずに
main()からをすぐ動かせる既存のクラスにmain()を追加すればいいじゃん
ぶっちゃけmain()のためだけにわざわざ専用のクラス作る必要ないよ

13 :
再利用可能なクラスにmainを実装して
再利用しにくくしちゃうんですね

14 :
>>13
main はstatic関数なので、ごみになるだけで再利用の邪魔にはならない。

15 :
複数あったらどれが動くんだよ?

16 :
>>15
Java, .NET を勉強してくれ。(やり方が異なる)

17 :
何言ってんだこの馬鹿

18 :
>>14
main method のあるクラスなんて継承したくないぞ

19 :
>>7
Effective C++ を読んでこい

20 :
>>14
意図しないメソッドが呼び出し可能ってどうなのよ

21 :
>>20
わざわざ呼び出しているんだから意図しているだろ。

22 :
>>21
親クラスに main() なんてメソッドがあったらキモイわあ

23 :
>>22
気分で言われてもな。

24 :
え?

25 :
main 関数に関してはクラスに属していなくても不自然ではないと思うなあ。
クラスが何のためにあるかを考えたときに main 関数の役割はそれに当てはまらないわけだし。

26 :
mainを隠蔽することができるなら
属させる意味はあると思われ

27 :
VC#なんか昔はフォームアプリのMainはフォームクラスの中に作られてたけど
今は変更されてProgramっていう無意味なクラスの中に作られるようになってるね

28 :
Startupに使う Main methodは、publicである必要はない。

29 :
そもそもエントリーポイントなんて概念自体が恣意的なものだ。
オブジェクトの一部であってもただの関数であっても良いが、それは言語それぞれの都合による。
どちらが良いとしても大した違いではない、問題としては瑣末なものだ。

30 :
関数の形をしてるが、単にエントリーポイントを指定する書式みたいなもんだからな

31 :
下手にmain()のようなグローバル関数を量産されても困るんだがな
クラスのテスト用によくmain()を複数実装しているのがあるが
ああいうときにmain()がグローバル関数で実装されるとテストしづらくて迷惑

32 :
>クラスのテスト用によくmain()を複数実装しているのがあるが
それはない
せめてmain内で呼び分けてくれ

33 :
>>32
障害が起こったときに、オプション変えるだけでテストできるから便利だぞ。

34 :
>>32
main内でやると面倒くさいぞ
mainをクラスの中にいれておくとclassファイルかjarファイルを追加削除するだけで
切り替えができるからけっこう便利なんだぜ

35 :
クラスに属せる main がかけたら
クラスに属さない main
クラスAに属する main
クラスBに属する main


やっぱクラスに属さない main が特別に見えて
クラスに属さない main から起動するってのは美しくないかい?

36 :
スマン、久々のかきこで上げてしまった orz.

37 :
CコンパチなんだからC++がmain意外のエントリポイントを用意するのは不自然
Cコンパチでないクラスベースの言語がわざわざ野良mainを用意するのは不自然
そんだけの話だろ

38 :
クラスに属するなら実質的にはmainという名前に縛る意味が無いんだよな

39 :
縛らないとどれがエントリポイントなのか分からんじゃん
それともentrypointみたいなキーワードを用意しろと?

40 :
AppMain クラスみたいな出来合いのクラスがあっても良いっちゃ良いかもね

41 :
>>39
リンカでエントリ関数で指定できるから、指定すればいい

42 :
めんどくちゃい

43 :
>>38
う、うん……(´・ω・`)

44 :
ディスってんじゃねーぞメーン

45 :
Javaから他の言語に移ったら
普通の関数のないJavaの方が害悪に見えるがな

46 :
それに適応出来ない程度なら、何でも害悪なんじゃないの

47 :
適応ぐらいできるけど、気持ち悪いと感じる。
staticメソッドって、クラスに関係あるファクトリ関数とか定義する為にあるのであって、
文法上の都合でクラスとなんの関係もないstatic関数を定義せにゃならんのがキモい。
まー、気分の問題なんだが。

48 :
staticつけるかつけないかの違いだけだろ

49 :
どのクラスにも属していないC++の関数は無数にあるのに、なぜmainだけを気にするのか

50 :
mainを隠蔽できないからだろうな

51 :
暇だからです

52 :
孤独を愛しているから

53 :
>>50
クラスごと隠蔽したらいいのに。

54 :
別にmainだけじゃなく、WinMainとか、OwlMainとか、色々あるじゃん

55 :
実際にはスタートアップルーチンからmain()は呼ばれます。
main()からプログラムが走ってるわけじゃない。
ま、スタートアップルーチンの作り次第ってこと。

56 :
グローバルにある関数は副作用さえなければ害悪はないだろうね。
用途によってそれぞれのネームスペースに収められていたほうが良いとおもうけど。

57 :
エントリポイントが複数あったら
実行時に指定する必要があるからな。

58 :
>>57
アレはアレで便利だが

59 :
Javaの場合全てのクラスに定義できる。
つかC++と違って予約語の類いじゃないし。
ただ有名なVMが指定されたmainメソッド
を勝手に読んでるだけ。
別にコンストラクタから始まるうVM自作しても構わん。

60 :
JLSで規定されてたりしないの?
仕様に従わないVMの自作はできるだろうけど

61 :
VMまで作らんでもシェルスクリプトと補助クラスで
任意のメソッド呼ぶ事もできるがな。
wrapingjava --entry Method user.SampleClass

62 :
なぜJavaのmain関数は特定のクラスに属しているのか

63 :
Java VMに登録されてるデフォルトのClassLoaderが、慣習的にmainというメソッドを読んでるだけで、
mainは予約語でもなんでもないから。もっといえば、Javaのクラスファイル上にエントリーポイントは無いから。
http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html
仕様上VMどのメソッドを呼ぼうが、インスタンスメソッドを呼ぼうがClassLoader次第。
あるいみ本当のエントリーポイントはClassLoaderになる。

64 :
>>63
慣習と言ってしまうなら、それは、C/C++も同じ。

65 :
C/C++は言語仕様でmain関数から始まると規定されてるだろ。
単なる慣習ではない
つーかJavaではJLSに規定ないの?

66 :
メソッドを呼び出した時の戻り値がちゃんと仕様を満たしているか把握すんのは動的型付けじゃ難しい

67 :
誤爆した。すまん。

68 :
いえいえ

69 :11/12/09
たぶんお出してしないと子供が生まれないからだよね
普段は隠蔽してるけど
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
20: くだすれPython(超初心者用) その12 (136)
21: C#, C♯, C#相談室 Part69 (8)
22: ●●●●TCL/TKなら俺に聞け 2●●●● (845)
23: 懐かしのMS-DOSプログラミング (315)