なぜC+のmain関数はどのクラスにも属していないのか
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/05/16(日) 14:13:030002デフォルトの名無しさん
2010/05/16(日) 14:15:45またC系の新言語か。
0003デフォルトの名無しさん
2010/05/16(日) 14:18:21糞スレは立てちゃだめって言ったでしょ
0004デフォルトの名無しさん
2010/05/16(日) 14:21:27C++は過去のシガラミを引きずっているから
0005デフォルトの名無しさん
2010/05/16(日) 15:43:55アプリケーションのエントリーポイントなんてグローバルに一つあれば十分じゃん。
0006デフォルトの名無しさん
2010/05/16(日) 18:05:22仕方なく属しているだけ
C++はCとの互換性を無視してまで無理に属させる必要も無い
終了
0007デフォルトの名無しさん
2010/05/16(日) 19:56:23仕方なくである必要ないだろ。
グローバル関数は害悪だ。
だからこそ属す必要がある。
0008デフォルトの名無しさん
2010/05/16(日) 20:18:09言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0009デフォルトの名無しさん
2010/05/16(日) 20:54:15と思ったらC+とかいう俺の知らない言語だった
0010デフォルトの名無しさん
2010/05/16(日) 21:33:55JavaやC#ではエントリポイントを持つためだけの意味のないクラスを作ったりする
文法上の制限でクラスに属さないといけないだけ
0011デフォルトの名無しさん
2010/05/16(日) 23:13:41C++はプリプロセッサで実装されていた時代の都合による
0012デフォルトの名無しさん
2010/05/16(日) 23:53:55だったらmain()を持ったクラスを作らずに
main()からをすぐ動かせる既存のクラスにmain()を追加すればいいじゃん
ぶっちゃけmain()のためだけにわざわざ専用のクラス作る必要ないよ
0013デフォルトの名無しさん
2010/05/17(月) 00:18:09再利用しにくくしちゃうんですね
0014デフォルトの名無しさん
2010/05/17(月) 00:20:39main はstatic関数なので、ごみになるだけで再利用の邪魔にはならない。
0015デフォルトの名無しさん
2010/05/17(月) 00:27:260016デフォルトの名無しさん
2010/05/17(月) 00:31:00Java, .NET を勉強してくれ。(やり方が異なる)
0017デフォルトの名無しさん
2010/05/17(月) 00:33:030018デフォルトの名無しさん
2010/05/17(月) 00:41:23main method のあるクラスなんて継承したくないぞ
0019デフォルトの名無しさん
2010/05/17(月) 01:04:42Effective C++ を読んでこい
0020デフォルトの名無しさん
2010/05/17(月) 01:32:20意図しないメソッドが呼び出し可能ってどうなのよ
0021デフォルトの名無しさん
2010/05/17(月) 03:25:33わざわざ呼び出しているんだから意図しているだろ。
0022デフォルトの名無しさん
2010/05/17(月) 03:43:13親クラスに main() なんてメソッドがあったらキモイわあ
0023デフォルトの名無しさん
2010/05/17(月) 07:49:40気分で言われてもな。
0024デフォルトの名無しさん
2010/05/17(月) 13:49:390025デフォルトの名無しさん
2010/05/17(月) 17:12:05クラスが何のためにあるかを考えたときに main 関数の役割はそれに当てはまらないわけだし。
0026デフォルトの名無しさん
2010/05/17(月) 19:00:34属させる意味はあると思われ
0027デフォルトの名無しさん
2010/05/17(月) 22:59:05今は変更されてProgramっていう無意味なクラスの中に作られるようになってるね
0028デフォルトの名無しさん
2010/05/17(月) 23:06:570029デフォルトの名無しさん
2010/05/18(火) 16:51:35オブジェクトの一部であってもただの関数であっても良いが、それは言語それぞれの都合による。
どちらが良いとしても大した違いではない、問題としては瑣末なものだ。
0030デフォルトの名無しさん
2010/05/19(水) 06:57:170031デフォルトの名無しさん
2010/05/19(水) 18:15:28クラスのテスト用によくmain()を複数実装しているのがあるが
ああいうときにmain()がグローバル関数で実装されるとテストしづらくて迷惑
0032デフォルトの名無しさん
2010/05/19(水) 21:05:26それはない
せめてmain内で呼び分けてくれ
0033デフォルトの名無しさん
2010/05/19(水) 21:19:51障害が起こったときに、オプション変えるだけでテストできるから便利だぞ。
0034デフォルトの名無しさん
2010/05/20(木) 00:35:30main内でやると面倒くさいぞ
mainをクラスの中にいれておくとclassファイルかjarファイルを追加削除するだけで
切り替えができるからけっこう便利なんだぜ
0035デフォルトの名無しさん
2010/05/22(土) 21:13:38クラスに属さない main
クラスAに属する main
クラスBに属する main
・
・
やっぱクラスに属さない main が特別に見えて
クラスに属さない main から起動するってのは美しくないかい?
0036デフォルトの名無しさん
2010/05/22(土) 21:14:230037デフォルトの名無しさん
2010/05/22(土) 21:16:55Cコンパチでないクラスベースの言語がわざわざ野良mainを用意するのは不自然
そんだけの話だろ
0038デフォルトの名無しさん
2010/05/22(土) 21:22:230039デフォルトの名無しさん
2010/05/23(日) 03:31:35それともentrypointみたいなキーワードを用意しろと?
0040デフォルトの名無しさん
2010/05/23(日) 03:33:380041デフォルトの名無しさん
2010/05/23(日) 10:31:56リンカでエントリ関数で指定できるから、指定すればいい
0042デフォルトの名無しさん
2010/05/23(日) 10:33:170043デフォルトの名無しさん
2010/05/23(日) 14:01:21う、うん……(´・ω・`)
0044デフォルトの名無しさん
2010/05/23(日) 16:13:450045デフォルトの名無しさん
2010/05/31(月) 06:38:10普通の関数のないJavaの方が害悪に見えるがな
0046デフォルトの名無しさん
2010/05/31(月) 06:44:110047デフォルトの名無しさん
2010/05/31(月) 17:49:02staticメソッドって、クラスに関係あるファクトリ関数とか定義する為にあるのであって、
文法上の都合でクラスとなんの関係もないstatic関数を定義せにゃならんのがキモい。
まー、気分の問題なんだが。
0048デフォルトの名無しさん
2010/06/01(火) 13:37:510049デフォルトの名無しさん
2010/06/01(火) 21:54:400050デフォルトの名無しさん
2010/06/01(火) 22:25:590051デフォルトの名無しさん
2010/06/26(土) 09:15:550052デフォルトの名無しさん
2010/06/26(土) 22:32:080053デフォルトの名無しさん
2010/06/26(土) 22:39:07クラスごと隠蔽したらいいのに。
0054デフォルトの名無しさん
2010/06/28(月) 21:38:280055デフォルトの名無しさん
2010/07/26(月) 18:50:51main()からプログラムが走ってるわけじゃない。
ま、スタートアップルーチンの作り次第ってこと。
0056デフォルトの名無しさん
2010/10/12(火) 14:15:06用途によってそれぞれのネームスペースに収められていたほうが良いとおもうけど。
0057デフォルトの名無しさん
2010/10/16(土) 22:06:24実行時に指定する必要があるからな。
0058デフォルトの名無しさん
2010/10/17(日) 06:20:00アレはアレで便利だが
0059デフォルトの名無しさん
2011/06/01(水) 17:16:33.88つかC++と違って予約語の類いじゃないし。
ただ有名なVMが指定されたmainメソッド
を勝手に読んでるだけ。
別にコンストラクタから始まるうVM自作しても構わん。
0060デフォルトの名無しさん
2011/06/01(水) 20:11:03.87仕様に従わないVMの自作はできるだろうけど
0061デフォルトの名無しさん
2011/06/01(水) 22:18:53.98任意のメソッド呼ぶ事もできるがな。
wrapingjava --entry Method user.SampleClass
0062デフォルトの名無しさん
2011/09/15(木) 18:52:47.820063デフォルトの名無しさん
2011/09/18(日) 17:21:50.60mainは予約語でもなんでもないから。もっといえば、Javaのクラスファイル上にエントリーポイントは無いから。
http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html
仕様上VMどのメソッドを呼ぼうが、インスタンスメソッドを呼ぼうがClassLoader次第。
あるいみ本当のエントリーポイントはClassLoaderになる。
0064デフォルトの名無しさん
2011/09/21(水) 17:05:22.65慣習と言ってしまうなら、それは、C/C++も同じ。
0065デフォルトの名無しさん
2011/09/21(水) 17:22:06.95単なる慣習ではない
つーかJavaではJLSに規定ないの?
0066デフォルトの名無しさん
2011/09/25(日) 15:44:46.820067デフォルトの名無しさん
2011/09/25(日) 15:45:13.770068デフォルトの名無しさん
2011/11/20(日) 11:29:34.290069デフォルトの名無しさん
2011/12/09(金) 00:21:39.23普段は隠蔽してるけど
0070ビル・ジョブス
2011/12/10(土) 08:55:25.070071デフォルトの名無しさん
2011/12/19(月) 02:07:02.200072デフォルトの名無しさん
2011/12/19(月) 05:41:15.100073デフォルトの名無しさん
2011/12/21(水) 05:23:28.85c++はクラスを使わなくても書けるようになってるから。もっと言うとc++のコンパイラはc互換のソースをコンパイルできなくてはならないから。
javaのmainがクラスに属しなければならない理由
javaがクラスに属しない要素を認めてないから。もっと言うとjavaの実行形式はclassファイルの集合なので、mainがクラスに属さないのならmainを格納するためのモジュールをclassファイルとは別に生成しなければならなくなる。
0074デフォルトの名無しさん
2011/12/21(水) 23:49:34.71ちなみに、C++でもマクロを駆使して、コンパイル時にg++ -DMainClass
みたいにmainとなるクラスを指定することは出来る。
ただ、冗長なだけで意味がない。
0075デフォルトの名無しさん
2011/12/23(金) 22:50:36.400076デフォルトの名無しさん
2011/12/24(土) 09:50:56.960077デフォルトの名無しさん
2011/12/24(土) 12:15:34.360078デフォルトの名無しさん
2011/12/24(土) 12:17:18.00じゃなくて
The Creator
な
0079デフォルトの名無しさん
2012/01/13(金) 18:55:14.05主になるものが1つのプログラムに複数あったら気持ち悪いじゃないか
0080デフォルトの名無しさん
2012/02/05(日) 00:18:18.44答えはC++だから。
D言語は既にあるけど、そういう言語があればクラスに属していたのかもね。
0081デフォルトの名無しさん
2012/02/23(木) 01:03:41.15不正解。C++の規格上フリースタンディングなら、
関数である限り、何をエントリーポイントにしても構わない。
0082デフォルトの名無しさん
2012/03/09(金) 00:29:50.660083デフォルトの名無しさん
2012/03/09(金) 00:55:07.020084デフォルトの名無しさん
2012/03/09(金) 17:42:57.95初期のC++その物。
0085デフォルトの名無しさん
2012/03/25(日) 14:05:22.390086デフォルトの名無しさん
2012/05/31(木) 01:17:57.48だって、そもそも処理が関数に属していなければならない理由なんて本来は無い。
C言語でmain()などのエントリポイントが必要な理由は
「C言語の仕様において、処理は何らかの関数に属していなければならないから」
でしかない。Javaはそれをさらに「メソッドは何らかのクラスに属していなければならない」ともう一段階増やしただけ。
0087デフォルトの名無しさん
2012/06/20(水) 20:47:06.27Compile系だと、mainとなるSource FIleの指定なんてできないから、どうしても
Entry Pointとして名前のついたBlockが必要になる。
0088デフォルトの名無しさん
2012/06/20(水) 23:41:33.87言いたいことがよく判らんよ。
まずは、「処理を関数外に書ける」って辺りからちんぷんかんぷんだ。
0089デフォルトの名無しさん
2012/06/24(日) 23:39:50.80print( "message" );
と書くだけで実行できるね。
■ このスレッドは過去ログ倉庫に格納されています