掲示板 |
掲示板を置いてみました。ご自由に書き込んで下さい。 ただし、私は根性なしなので、閑古鳥が鳴いたり、荒れてきたと 思ったらとっとと閉鎖する可能性があります。 |
400 | Re^2: 何を作るか | コメント数: 1件 |
(ぱ) | PXU00211@nifty.ne.jp | 2002/12/14 (土) 18:37 | |
http://member.nifty.ne.jp/maebashi/ | ||
> > 僕はもっと実用的なものを作りたいので。 > 「実用的なもの」の具体案が現在頭にあって、 > なおかつ、それがCで作成可能だと思うなら、 「実用的なもの」が具体的に何かによりますが、Cで書こうとすると、問題はGUIなんですよね。Windowsだと特に。 だからといって、高いお金を出してVC++を買ってきても、MFCの敷居は高いです。C++をそれなりに知っていないといけませんし。 いっそJavaというのも選択肢のひとつかも。でもこれはこれでそれなりに敷居が高いと思います。 30行ぐらいのBASICプログラムでブロック崩しを作って、いい気分になっていられたあの頃が懐かしいかも(20年くらい前)。 > 私的にC++は目的があってもキビしいです・・・。 C++を使う目的って、結局、VC++とMFCを使うためってのが多いんでしょうね。 あとはSTLあたりを便利に使いたい、とか。 C++を極めるのはキビしいですが、全ての機能を使わなければならないわけではないですよね。ある程度割り切らないとやってられないと思います。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
399 | Re^2: 何を作るか | コメント数: 0件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/12/12 (木) 09:04 | |
> > 僕はもっと実用的なものを作りたいので。 それなら、とりあえずCで作ってみては? 全く新規で作るよりも、誰かうまい人のSourceを 手に入れていじくってみると、上達も早いですよ? Freeで手に入る良質のSourceって多いですから。 #仕事で見かけるSourceってどうして質が悪いのかしら。 #お金もらってるはずなのに。 Cでは実用的なものが作れないということは決してないですし、 Cでダメなものが、C++で格段に良くなることもありません。 そのあたりは言語よりも個別の設計次第ですから。 ただ、その目的を果たすための環境下で 目的に合致するLibraryがC++にあるなら、 C++に移行しても いいでしょう。 > 私的にC++は目的があってもキビしいです・・・。 私もC++はあまり好きになれないですねぇ。 一部はCよりも便利だなって思えるところもあるのですけどね。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
398 | Re: 何を作るか | コメント数: 3件 |
レプラコーン | replicorn@ma1.annie.ne.jp | 2002/12/12 (木) 01:15 | |
> 僕はもっと実用的なものを作りたいので。 「実用的なもの」の具体案が現在頭にあって、 なおかつ、それがCで作成可能だと思うなら、 そのままで良いのではないでしょうか。 私的にC++は目的があってもキビしいです・・・。 # 私はC++ Primerを読み始めて3日目ですが、 # 早くも半分のところで満腹状態です。;-< > できたらそれのお勧めの本がありましたら 気に入った本の参考文献を当たってみるのが良いと思いますよ。 高度なものなら、ポインタ完全制覇か、エキスパートCかと。 ネットに入れる時間が多いのなら、 気になるキーワードなどで検索をかけて サイトを回るのが良いかもしれないです。タダですし。 # と、また的外れな意見になってしまったら失礼。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
397 | どうもありがとうございました | コメント数: 5件 |
Linkru | 2002/12/12 (木) 00:09 | |
皆様のおかげで一応読み終えることができました。 そしてこれからなんですが 僕はもっと実用的なものを作りたいので。 もっと難しいCをやったほうがいいでしょうか? それともC++に行ったほうがいいでしょうか? 皆さんならどうしますか?参考までに聞かせてください できたらそれのお勧めの本がありましたら 教えてください。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
396 | Re^6: またまた質問です・・。 | コメント数: 0件 |
Linkru | 2002/12/09 (月) 23:29 | |
http://e | ||
> とりあえず、情報を得るまでの無駄な時間は概ね以下の関係があるので > Online Manual < Internet Manual < 手元の本 < 知人 < 掲示板 > Online/InternetのManualをドンドン活用しましょ。 > # って、ここに閑古鳥を鳴かせるつもりの発言ではないです(^^;) わかりました。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
395 | Re^5: またまた質問です・・。 | コメント数: 1件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/12/06 (金) 12:33 | |
> > 本を読んだほうがもっと早い! > そうですね何かcygwinの本を買ってみようと思います > あと英語ももっと勉強しないといけませんね。 cygwinの本?なんか目的ずれてませんか? cygwinの本にgccのoptionなんか書いてあるのかな? 書いてあるのもあるでしょうが。 少なくとも、コンパイラのことなら前橋さんの本の 25pageを確認すればいいみたいですよ。 ↓で、優しく教えてくれてます。 > > だめです。-o オプションの意味を復習してください。(p.25) とりあえず、情報を得るまでの無駄な時間は概ね以下の関係があるので Online Manual < Internet Manual < 手元の本 < 知人 < 掲示板 Online/InternetのManualをドンドン活用しましょ。 # って、ここに閑古鳥を鳴かせるつもりの発言ではないです(^^;) |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
394 | Re^6: またまた質問です・・。 | コメント数: 0件 |
れぷ | 2002/12/05 (木) 20:34 | |
> UNIX用のメジャーなプログラムの多くは、ボランティアによって > マニュアルが和訳されています。というわけで、gcc のマニュアル > も和訳されています。 そういえば、かなり昔に見たことがありました・・・(^^; 従って、先ほどの私のレスはゴミと化しましたね。 # 無視されているので、元々見当ハズレだったのでしょうけど、 # ちょっと寂しいですね。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
393 | Re^5: またまた質問です・・。 | コメント数: 1件 |
kit | 2002/12/05 (木) 19:23 | |
UNIX用のメジャーなプログラムの多くは、ボランティアによって マニュアルが和訳されています。というわけで、gcc のマニュアル も和訳されています。たとえば、下記は FreeBSD の日本語マニュ アル検索のページですが、ここで、「コマンド/キーワード」の 欄に「gcc」と入力してから、「SEARCH」ボタンを押してみましょう。 http://www.jp.freebsd.org/man-jp/search.html gcc のマニュアル和訳が参照できる筈です。 なお、gcc に関しては、より詳しいマニュアルが、下記のURLにあります。 http://www.sra.co.jp/wingnut/gcc/gcc-j.html (ただし、サイズが1.5MBもあるので、注意) なお、man コマンドで出てくる程度の英語は読めた方が良いというのは 同感です。文法は高校というよりむしろ中学英語レベルですから、簡単 ですよ。ただし、オンラインの英和辞典を購入して、簡単に英単語が 引けるようにしておくことをお勧めします。僕は英文の man を読むよう になって10年以上になりますが、いまだに毎日オンライン英和辞典を 使ってます。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
392 | Re^4: またまた質問です・・。 | コメント数: 4件 |
Linkru | 2002/12/05 (木) 16:23 | |
> book.cを、もう一度正しく入力した後で、 > % gcc -o hoge.exe book.c util.c > と、入力すれば、hoge.exeという実行fileができるでしょう。 言われたとおりにやったらちゃんとできました。 > > >% man gcc > > 見てみましたが英語ばっかりで読めません・・。(汗 > とりあえず、ProgramなどのManualは英語が標準ですから、 > この程度の英語は読めるようになっていないと... > 英語の能力については、私もえらそうなことは言えませんが、 > 少なくとも、ここで回答を待つより > -o を検索してそこに書いてある英語を翻訳するほうが早いでしょう。(^^;) > 本を読んだほうがもっと早い! そうですね何かcygwinの本を買ってみようと思います あと英語ももっと勉強しないといけませんね。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
391 | Re^4: またまた質問です・・。 | コメント数: 0件 |
Linkru | 2002/12/05 (木) 16:18 | |
> > >最低、以下のoptionくらいを把握しておくと いいんじゃないでしょうか。 > > >-o xxx, -c, -lxxx -Wall -g -O > > >そのうち、以下も必要になるかもしれませんね。 > > >-Lxxx -Ixxx -Dxxx=xxx -p -G -M > > > 上の二つは見たこともないのですが・・。 上のは十二個だったのですか・・。 僕は一列ずつで数えてしまいました。 > とりあえず、超サービスです(要らんことするなって怒られる?) > -o file名: 出力file名の指定 > -c: compileのみを行う(Linkはしない) > -llibrary名: Dynamic LinkするLibraryの指定 > -Wall: compile時の警告表示 > -g: debug option > -O: 最適化 > -Ldir名: Dynamic LinkするLibraryの検索PATH指定 > -Idir名: include fileの検索PATH指定 > -Dmacro名: #defineの代わり > -p: profileの作成 > -G: linkを行う > -M: 依存関係の報告 親切にありがとうございます。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
390 | Re^4: またまた質問です・・。 | コメント数: 0件 |
れぷ | 2002/12/05 (木) 09:09 | |
> > 見てみましたが英語ばっかりで読めません・・。(汗 > とりあえず、ProgramなどのManualは英語が標準ですから、 cygwinを入れているってことはWindows環境ですよね。 英語がとりあえず嫌なら、フリーの日本語コンパイラを入れるのも手かと。 でも、「英語だから読みたくない」ではこの先困るでしょうね。 -oなどの説明は読めると思いますし、一気に全部を読もうとしないで、 読めるところから始めるのが良いのでは?>Linkruさん # gccのスイッチは英単語で指定するものがほとんどだった・・・はず。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
389 | Re^3: またまた質問です・・。 | コメント数: 1件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/12/05 (木) 08:03 | |
> >最低、以下のoptionくらいを把握しておくと いいんじゃないでしょうか。 > >-o xxx, -c, -lxxx -Wall -g -O > >そのうち、以下も必要になるかもしれませんね。 > >-Lxxx -Ixxx -Dxxx=xxx -p -G -M > 上の二つは見たこともないのですが・・。 2つ?12個の間違いでは? とりあえず、超サービスです(要らんことするなって怒られる?) -o file名: 出力file名の指定 -c: compileのみを行う(Linkはしない) -llibrary名: Dynamic LinkするLibraryの指定 -Wall: compile時の警告表示 -g: debug option -O: 最適化 -Ldir名: Dynamic LinkするLibraryの検索PATH指定 -Idir名: include fileの検索PATH指定 -Dmacro名: #defineの代わり -p: profileの作成 -G: linkを行う -M: 依存関係の報告 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
388 | Re^3: またまた質問です・・。 | コメント数: 6件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/12/05 (木) 08:01 | |
> >そうでしょうねえ。ご愁傷様です。 > 実際にどういう風に入れればいいのか教えてください 前橋さんが記載した該当ページは読んでみましたか? book.cを、もう一度正しく入力した後で、 % gcc -o hoge.exe book.c util.c と、入力すれば、hoge.exeという実行fileができるでしょう。 -oは、出力file名を指定するためのOptionです。 > >% man gcc > 見てみましたが英語ばっかりで読めません・・。(汗 とりあえず、ProgramなどのManualは英語が標準ですから、 この程度の英語は読めるようになっていないと... 英語の能力については、私もえらそうなことは言えませんが、 少なくとも、ここで回答を待つより -o を検索してそこに書いてある英語を翻訳するほうが早いでしょう。(^^;) 本を読んだほうがもっと早い! |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
387 | Re^2: またまた質問です・・。 | コメント数: 9件 |
Linkru | 2002/12/04 (水) 23:02 | |
>そうでしょうねえ。ご愁傷様です。 実際にどういう風に入れればいいのか教えてください >cygwinを使っているなら、 >% man gcc >で、gccのmanualが読むことができるでしょう。 見てみましたが英語ばっかりで読めません・・。(汗 ># 今までa.exe以外の実行Fileを作ったことがないのかな。 >最低、以下のoptionくらいを把握しておくと いいんじゃないでしょうか。 >-o xxx, -c, -lxxx -Wall -g -O >そのうち、以下も必要になるかもしれませんね。 >-Lxxx -Ixxx -Dxxx=xxx -p -G -M 上の二つは見たこともないのですが・・。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
386 | Re: またまた質問です・・。 | コメント数: 0件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/12/04 (水) 12:54 | |
> 複数のソースファイルの名前を与えてコンパイルするというとこなんですが > gcc -o book.c util.c (cygwinを使っているので)という風 > に入れればいいのですか? cygwinを使っているなら、 % man gcc で、gccのmanualが読むことができるでしょう。 不明なoptionは常に調べる癖をつけておいたほうがいいですよ。 もっとも、"-o"が不明っていうのも、困りますが。 # 今までa.exe以外の実行Fileを作ったことがないのかな。 最低、以下のoptionくらいを把握しておくと いいんじゃないでしょうか。 -o xxx, -c, -lxxx -Wall -g -O そのうち、以下も必要になるかもしれませんね。 -Lxxx -Ixxx -Dxxx=xxx -p -G -M |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
385 | Re: またまた質問です・・。 | コメント数: 10件 |
(ぱ) | PXU00211@nifty.ne.jp | 2002/12/04 (水) 02:01 | |
http://member.nifty.ne.jp/maebashi/ | ||
> gcc -o book.c util.c (cygwinを使っているので)という風 > に入れればいいのですか? だめです。-o オプションの意味を復習してください。(p.25) > というエラーが出てbook.cのファイルの内容が削除されてしまって > いるみたいなのです。 そうでしょうねえ。ご愁傷様です。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
384 | またまた質問です・・。 | コメント数: 12件 |
Linkru | 2002/12/03 (火) 22:06 | |
この前質問したばかりなのにすいません。 今度は298ページの分割コンパイルのとこなんですが 複数のソースファイルの名前を与えてコンパイルするというとこなんですが gcc -o book.c util.c (cygwinを使っているので)という風 に入れればいいのですか? もしそれでいいのなら実際にやってみると /usr/lib/libcygwin.a(libcmain.o)(.text+0x6a):libcmain.c: undefined reference to `WinMain@16' collect2: ld returned 1 exit status というエラーが出てbook.cのファイルの内容が削除されてしまっているみたいなのです。どうやればうまくできるのでしょうか? |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
383 | Re^2: また投稿させていただきました | コメント数: 0件 |
Linkru | 2002/12/01 (日) 23:30 | |
無事作り終えることができました。 ご協力ありがとうございました。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
382 | Re: また投稿させていただきました | コメント数: 1件 |
(ぱ) | PXU00211@nifty.ne.jp | 2002/11/30 (土) 15:22 | |
http://member.nifty.ne.jp/maebashi/ | ||
> 今回も質問なんですが(C言語体当たり学習 徹底入門からですが) > book_kanri.cを書いてコンパイルしてみると > やたらと `〜〜〜' undeclared (first use in this function) > というのが出てくるのですがどういう意味なのでしょうか? さすがにbook_kanri.cともなると結構長いので、打ち込んで一発で コンパイルを通すのは難しいでしょう。 エラーの原因は本多さんが書いておられるとおりですが、parse errorなどは、 かなり前の方のミスが原因になることもあります。 今うちこんだソースは名前を変えて保存して、1関数づつ、book_kanri.c にコピーして、gcc -Wall -c book_kanri.c で徐々にコンパイルを通して いってみてはどうでしょうか。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
381 | Re: 追加: また投稿させていただきました | コメント数: 0件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/11/30 (土) 13:53 | |
> やたらと `〜〜〜' undeclared (first use in this function) > というのが出てくるのですがどういう意味なのでしょうか? > 教えてくださいお願いします 〜〜〜で、書かれている変数が宣言されていないという意味です。 関数の先頭で使用している変数が最初に宣言されていないのでしょう。 > あとparse error before `*'という > メッセージも出てくるのですがどういう意味なのでしょうか? *の文字の前または*の文字が不正だと言う意味です。 ()や[],{}の数が一致していないとか、;が抜けているとか、 半角じゃなくて全角文字を入力しているとか(全角スペースとかね) 文の途中に;が入ってるとかの可能性があるのではないでしょうか。 あとは、改行コードがMS式なのに、UNIXでコンパイルしたとか。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
380 | 追加: また投稿させていただきました | コメント数: 1件 |
Linkru | 2002/11/30 (土) 02:06 | |
あとparse error before `*'という メッセージも出てくるのですがどういう意味なのでしょうか? |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
379 | また投稿させていただきました | コメント数: 4件 |
Linkru | 2002/11/30 (土) 02:03 | |
今回も質問なんですが(C言語体当たり学習 徹底入門からですが) book_kanri.cを書いてコンパイルしてみると やたらと `〜〜〜' undeclared (first use in this function) というのが出てくるのですがどういう意味なのでしょうか? 教えてくださいお願いします |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
378 | Re^16: main関数 | コメント数: 0件 |
Tak | 2002/11/24 (日) 07:21 | |
> あれ?C++で、exit()したときって、 > 自動変数オブジェクトのデストラクタ呼ばれないのでしたっけ? 御意。 ISO/IEC 14882:1998 3.6.1-4 exit 関数を呼び出すことは現ブロックを抜けずにプログラムを終了させることであるため、自動記憶域期間を持つオブジェクトは破棄されない。静的記憶域機関を持つオブジェクトのデストラクタ中から exit を呼び出すことは、未定義の動作を引き起こす。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
377 | Re^15: main関数 | コメント数: 1件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/11/22 (金) 10:34 | |
> > あと、main()から終了するときにreturnか、exit()かとか。 > C++ を始めると exit() は使えなくなりますね。自動変数オブジェクトを > 処分しないで終了するなんて恐怖すぎ。特に関数呼び出しの入り組んだ > 奥から exit() なんてコードを C++ で見ちゃうとガクガクブルブル。 デストラクタで処理すればいいのでは?って、そういう問題じゃないのかな? あれ?C++で、exit()したときって、 自動変数オブジェクトのデストラクタ呼ばれないのでしたっけ? |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
376 | Re^14: main関数 | コメント数: 2件 |
Taka | 2002/11/21 (木) 18:30 | |
> あと、main()から終了するときにreturnか、exit()かとか。 C++ を始めると exit() は使えなくなりますね。自動変数オブジェクトを処分しないで終了するなんて恐怖すぎ。特に関数呼び出しの入り組んだ奥から exit() なんてコードを C++ で見ちゃうとガクガクブルブル。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
375 | Re^11: main関数 | コメント数: 0件 |
れぷ | 2002/11/21 (木) 12:43 | |
> main()の型が処理系定義できるなら、 > system()の振る舞いも処理系が定義するのでは? > 処理系(コンパイラ+実行環境)が例えば以下の様に定義するんじゃないですか? > - void main()に対してsystem()は不定の値を返す。 > - double main()に対してsystem()がdouble→int変換した結果を返す。 もしシステムコール_systemがdouble型としても、 system()ってPOSIX辺りだとbsh依存なので、 bshが頑張ることになるんでしょうね。 > # 「double main()に対するsystem()はcore dump」と定義してもいい? :-p じゃぁ私は「void main()に対するsystem()はスタックポインタがズレる」ということで:-) |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
374 | Re^13: main関数 | コメント数: 3件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/11/21 (木) 10:34 | |
> 私が入門書を書くなら > 「歴史的経緯により main の書式にはいろいろなものがあるが、この本では原稿執筆時点でもっとも一般的な int main(int argc, char **argv) を採用する」 > と書いて、コラムでいくつか別形式を紹介する程度にとどめるでせう。 > # でないと今回みたいにまた論争になったりするし。 スタイルで言えば、引数を取るmain()も int main( int argc, char **argv)とint main( int argc, char *argv[]) のどっちを選ぶかっていうも好みの分かれるところですね。 あと、main()から終了するときにreturnか、exit()かとか。 私は どちらも前者が好み(^^) |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
373 | Re^12: main関数 | コメント数: 4件 |
Taka | 2002/11/21 (木) 08:50 | |
> 「今から実行・移植する可能性のある環境でエラーにならない > 自分の気に入ったスタイルを選べ」 > ってことですね? 御意。 私が入門書を書くなら 「歴史的経緯により main の書式にはいろいろなものがあるが、この本では原稿執筆時点でもっとも一般的な int main(int argc, char **argv) を採用する」 と書いて、コラムでいくつか別形式を紹介する程度にとどめるでせう。 # でないと今回みたいにまた論争になったりするし。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
372 | Re^11: main関数 | コメント数: 5件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/11/21 (木) 08:19 | |
> 元発言者の質問から話題が逸脱しているので修正。 > Q: どの main が正しいか > A: 前提条件次第。 > つーことになるのかな?前提条件とは つまり 「今から実行・移植する可能性のある環境でエラーにならない 自分の気に入ったスタイルを選べ」 ってことですね? 仕事なら「周りと同じスタイルにしろ」の一言で終わり!? :-P |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
371 | Re^10: main関数 | コメント数: 1件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/11/21 (木) 08:15 | |
> > 「もし処理系作者が void main() を認めたなら、ユーザは void main() を使ってよい。もし処理系作者が double main() を認めていないなら、ユーザは double main() を使ってはいけない」 > system()からの呼び出しのように他のプロセスと絡むものはどうなるでしょうか? main()の型が処理系定義できるなら、 system()の振る舞いも処理系が定義するのでは? 処理系(コンパイラ+実行環境)が例えば以下の様に定義するんじゃないですか? - void main()に対してsystem()は不定の値を返す。 - double main()に対してsystem()がdouble→int変換した結果を返す。 # 「double main()に対するsystem()はcore dump」と定義してもいい? :-p |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
370 | Re^9: main関数 | コメント数: 2件 |
レプラコーン | 2002/11/20 (水) 17:03 | |
> 「もし処理系作者が void main() を認めたなら、ユーザは void main() を使ってよい。もし処理系作者が double main() を認めていないなら、ユーザは double main() を使ってはいけない」 これはすごく判りやすい説明ですね。 それで、この件に関連した質問なのですけれど、 system()からの呼び出しのように他のプロセスと絡むものはどうなるでしょうか? このような場合はsystem()などが規制対象となる可能性もありますね。 この質問は、処理系作者がint main(〜)以外の記述を認める場合でも、 コンパイラ実装者がその辺りを考慮してsystem()などを実装するということが 保証できないのではないか、というのが根っこです。:-) |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
369 | Re^10: main関数 | コメント数: 6件 |
Taka | 2002/11/20 (水) 16:54 | |
元発言者の質問から話題が逸脱しているので修正。 Q: どの main が正しいか A: 前提条件次第。 つーことになるのかな?前提条件とは ・ISO/IEC 9899:1990 に厳密に準拠するかどうか ・ISO/IEC 9899:1999 に厳密に準拠するかどうか ・古い処理系との互換性を優先するかどうか ですな。歴史のある言語ではよくある話。 # ってこの質問 2ch でも見たような気が... |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
368 | Re^9: main関数 | コメント数: 7件 |
Taka | 2002/11/20 (水) 16:48 | |
> int main() ≠ int main(void)で、 > int main() ≒ int main(int argc, char **argv) > では、ないでしょうか? 「古い (C90 より前の) 処理系で int main() と書くことは、新しい (C90 準拠の) 処理系で int main(int,char**) と書くことに近い」ということならまさに御意。 498 で主張してるのは「ISO/IEC 9899:1990 には int main() という記述は無い」ということです。よって int main() { ... } と書くことは「古い処理系との互換性を保つため、ユーザがあえて規格書からの逸脱を選択した」ことになります。これは「良い悪い」とは話の次元が異なります。 > int main(void)は引数を付けて呼び出したらNG. > int main(), int main(int argc, char **argv)は > 引数をつけて呼び出してもOKでは? 御意。 ただし C++ では main をユーザが呼び出すことを禁じています。C99 ではどうだったかなぁ > 誰か int main(void) とそれ以外で関数呼び出し手順が異なるような処理系があってもおかしくないし、そのような処理系では複数の異なる crt0 があってもかまわないわけですね。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
367 | Re^8: main関数 | コメント数: 8件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/11/20 (水) 15:53 | |
> ・ISO/IEC 9899:1990 だけを見る場合 > int main(void) { ... } > int main(int argc, char *argv[]) { ... } > が正解。ただし argv の後ろに処理系固有の (仮) 引数を認める。 引数を受け取らない関数はC++では()だけを書けばいいのですが、 Cでは明示的に(void)としなければならないでしょう? ()内に、voidの記述がない場合は 引数の記述が許された関数という扱いなのだから、 int main() ≠ int main(void)で、 int main() ≒ int main(int argc, char **argv) では、ないでしょうか? int main(void)は引数を付けて呼び出したらNG. int main(), int main(int argc, char **argv)は 引数をつけて呼び出してもOKでは? |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
366 | Re^8: main関数 | コメント数: 3件 |
Taka | 2002/11/20 (水) 12:00 | |
> (望洋せんせの文書は「ユーザがそのような main を定義してよい」と読めちゃうが、規格書を読む限り「処理系作者がそのような main を使うことを、ユーザに認めてよい」と解釈できる) すっげーわかりにくい&誤解を招く表現なので訂正。 「int 以外の返却値を持つ main を、処理系作者が認める場合、作者が特に認めたものだけをユーザが使ってよい」 つまり、 「もし処理系作者が void main() を認めたなら、ユーザは void main() を使ってよい。もし処理系作者が double main() を認めていないなら、ユーザは double main() を使ってはいけない」 ということ。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
365 | Re^7: main関数 | コメント数: 9件 |
Taka | 2002/11/20 (水) 11:28 | |
Cの場合については前提条件によって議論を分ける必要があります。 # ってほかの言語でも同じだけど ・ISO/IEC 9899:1990 だけを見る場合 int main(void) { ... } int main(int argc, char *argv[]) { ... } が正解。ただし argv の後ろに処理系固有の (仮) 引数を認める。 ・ISO/IEC 9899:1999 だけを見る場合 望洋せんせの説明のとおり ・ISO/IEC 9899:1990 以前の処理系も考慮する場合 void が無かった頃の処理系を考えるなら int main() { ... } が正解。 本によって int main() {} と int main(void) {} があるのは「対象処理系」が異なるから。たとえば私の手元にある VC++/GCC では両方通るけど、古い UN*X なんかだと ANSI-C 非対応のコンパイラしか入っていない場合があって、それだと int main(void) は通らない。しかたないから int main() とするしかない。 だから ANSI-C 対応でない処理系 *でも動作する* ような main() にしたいのなら int main() だし、そんな過去の遺物は見捨てる前提なら int main(void) だにょ。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
364 | Re^7: main関数 | コメント数: 4件 |
Taka | 2002/11/20 (水) 11:15 | |
えっと、前のコメントはただのちゃちゃだったのですが(爆) http://www.bohyoh.com/CandCPP/FAQ/FAQ00014.html とか参照。ただし望洋せんせによる規格書の解釈と私の規格書の解釈は若干違います。今手元にC規格書 (JIS X 3010-1990) が無いのでC++規格書 (ISO/IEC 14882:1998) を超訳すると ・規格書が認める main は以下の2つのうちのどちらか int main() { ... } int main(int argc, char *argv[]) { ... } ・ただし argv の後ろに処理系固有の引数を付加することを認める ・もし仮に main の返却値の型が int 以外であるとしたら、それは処理系定義とする (望洋せんせの文書は「ユーザがそのような main を定義してよい」と読めちゃうが、規格書を読む限り「処理系作者がそのような main を使うことを、ユーザに認めてよい」と解釈できる) んでCの場合に戻った内容は別発言で。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
363 | Re^6: main関数 | コメント数: 15件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/11/20 (水) 09:02 | |
> > 関数定義の方ではvoidを入れても入れなくてもどっちでも > > いいですが、プロトタイプ宣言では明確に意味が違うので、 > > 引数がないならvoidを入れなければなりません。 > もっと言わずもがなですが、関数定義が関数原型宣言を兼ねる場合には > void の有無で明確に意味が違います。 でも、main()って、一般的には、他の関数から呼び出すこともないので、 プロトタイプ宣言もしないでしょう? # 最初の質問は宣言じゃなくて定義の仕方じゃなかったかしら? ただ、宣言と定義を同じ様に記述した方がいいと思うので、 仮に、宣言しない場合でも、宣言した場合と同じ定義で記述した方が いいと思いますね。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
362 | Re^5: main関数 | コメント数: 16件 |
Taka | 2002/11/20 (水) 08:33 | |
> 関数定義の方ではvoidを入れても入れなくてもどっちでも > いいですが、プロトタイプ宣言では明確に意味が違うので、 > 引数がないならvoidを入れなければなりません。 もっと言わずもがなですが、関数定義が関数原型宣言を兼ねる場合には void の有無で明確に意味が違います。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
361 | Re^4: main関数 | コメント数: 17件 |
(ぱ) | PXU00211@nifty.ne.jp | 2002/11/20 (水) 08:16 | |
http://member.nifty.ne.jp/maebashi/ | ||
言わずもがななことかと思いますが... 関数定義の方ではvoidを入れても入れなくてもどっちでも いいですが、プロトタイプ宣言では明確に意味が違うので、 引数がないならvoidを入れなければなりません。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
360 | Re^3: main関数 | コメント数: 18件 |
・・・ | 2002/11/19 (火) 16:15 | |
<Cではプロトタイプと見なされないということだろう。> という話もありますが、どうなんでしょう? (まぁ、プロトタイプの意味がよくわかっていないという話もありますが) |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
359 | Re^2: main関数 | コメント数: 0件 |
・・・ | 2002/11/19 (火) 16:09 | |
私も好みの問題かなとは思ったのですが、 超基本ともいえることなのに、本によって記述方法が違うので、 正式にはどうなのかなと思った次第です。 int main (void) { return 0; } が推奨スタイルなんですかねぇ、ANSI的には・・・ |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
358 | Re^2: main関数 | コメント数: 0件 |
xiu | 2002/11/19 (火) 15:37 | |
追伸: K&R A10.1によると int main(void) は新しい関数定義スタイルで int main() は古い関数定義のスタイル ということになるのでしょうか。 だからどうしたという程度のことですが... |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
357 | Re^2: main関数 | コメント数: 0件 |
本多 | manybook@msc.biglobe.ne.jp | 2002/11/19 (火) 08:39 | |
> 1.と2.は同じです。voidを書く、書かないかは > 好みでいいのではないでしょうか? 私も好みでいいと思いますけど... 厳密にはANSIでは int main(void)とint main(int argc, char **argv)以外は main()の型に認められてないんでしたっけ? でも、K&R 2ndにも main() { printf("Hello, World\n"); } なんて、例題があるくらいだから、main()も、OKなのでしょう? > 私は面倒だから書かないことが多いですけど。 逆に、私は絶対に書きますね。 引数は受け取らないって言う強い意志の表れ :-P あと、これも好みですけど、 return (0);は絶対に書きません。return 0;にします。 goto文や、case文に()をつけないから、 returnでもスタイルを共通にしたいし、 ()をつけるとreturn関数を呼び出してるみたいに見えるし...(^^;) これは、反対意見 多そうですけどね(^^) |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
356 | Re: main関数 | コメント数: 3件 |
xiu | 2002/11/19 (火) 01:34 | |
1.と2.は同じです。voidを書く、書かないかは 好みでいいのではないでしょうか? 私は面倒だから書かないことが多いですけど。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
355 | main関数 | コメント数: 4件 |
・・・・・・ | 2002/11/19 (火) 00:42 | |
引数なしのメイン関数の正しい書法が分かりません。 1. int main () { return 0; } 2. int main (void) { return (0); } 他にも1,2の変形といったものが考えられます。 何が正しい作法なのでしょうか? |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
354 | Re^2: C言語体当たり学習での質問 | コメント数: 0件 |
Linkru | 2002/11/15 (金) 22:05 | |
わかりました 親切な回答ありがとうございました |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
353 | Re: ほげを考えるページ | コメント数: 0件 |
(ぱ) | PXU00211@nifty.ne.jp | 2002/11/14 (木) 21:49 | |
http://member.nifty.ne.jp/maebashi/ | ||
> 転載させていただいた「ほげを考えるページ」がGoogleに拾われたようですね。 > 検索でトップに出ます。 ...と思ってたら今はもう出ない... Googleって不思議。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
352 | ほげを考えるページ | コメント数: 1件 |
(ぱ) | PXU00211@nifty.ne.jp | 2002/11/13 (水) 02:58 | |
http://member.nifty.ne.jp/maebashi/ | ||
転載させていただいた「ほげを考えるページ」がGoogleに拾われたようですね。 検索でトップに出ます。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
351 | Re: C言語体当たり学習での質問 | コメント数: 1件 |
(ぱ) | PXU00211@nifty.ne.jp | 2002/11/13 (水) 02:56 | |
http://member.nifty.ne.jp/maebashi/ | ||
> 270ページの下に書いてある「*my_malloc」関数の「*」は > どういう意味があるのですか? 戻り値の型がvoid* なので、 void *my_malloc(size_t size) と書いているわけです。 void*という型については、その直後に説明があります。 ところで、こういうとき、 void* my_malloc(size_t size) のように、*をvoid側に寄せて書くという流儀もあります。 私は、実は本を書くとき以外は void* my_malloc(size_t size) のように書いてたりします。 |
【新規投稿】 【この投稿にリプライ】 【投稿者削除】 |
より新しい記事へ ← 500 件の投稿中 400件目〜351件目を表示 → より前の記事へ |
Copyright(C) 1999 NIFTY Corporation All Rights Reserved. |