No.6ベストアンサー
- 回答日時:
まず初めに、過去ログの探し方についてです。
http://oshiete.goo.ne.jp/ask/howto/search.html
実際に、このカテゴリーから「void main 戻り値 引数」で検索をすれば、今だと56件ほど返ってきます。その中でお勧めなのが、以下の3件でしょうか。(各レベルについては、私の独断と偏見によるものです。)
小学生レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?q=100506
初学者レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?q=487521
技術者レベル→
http://oshiete1.goo.ne.jp/kotaeru.php3?q=328994
あと、「小学生でも理解できるくらいに噛み砕いて…」についてですが、強いてあげれば以下のようにもなるかと。
例えば、「関数」という抽象的概念の具体例としてよくあげられるものに、「自動販売機」があります。もちろん、この中にも単にお金を入れておく容器や缶ジュースなどとは別に、お釣りがいくらなのかとか、缶ジュースの残りがいくつなのかをチェックするようなソフトウェアが入っているはずです。(最新のものだと、100円玉の裏表の模様まで、チェックするものがあるらしいですね。)
そのようなプログラムの動作の概略を、main関数を用いて簡単に表せば、以下のようになると思います。(あくまで、噛み砕いて説明しているからであって、厳密には全然違いますよ。というより、正確にはメーカーの人じゃないと分からないでしょう。)
缶ジュース main (120円)
500ml入りペットボトル main (150円)
もちろん、これをドラクエ風に書けば、以下のようにもなるかと。
HPがフルに回復 main (ベホマ)
メタルキングの剣 main (37000G)
余談ですが、パルプンテなども、内部ではおそらく乱数なんかを発生させているんでしょうね~。ゲームプログラミングの方は一度もしたことがないので、あくまで想像ですけど。
この回答へのお礼
お礼日時:2005/11/13 17:41
>HPがフルに回復 main (ベホマ)
>メタルキングの剣 main (37000G)
なんとなくイメージがわきました。
ご返答ありがとうございました。
No.8
- 回答日時:
mac_resさんを見習って、私もまともに答えます。
プログラムが起動すると、スタートアップと呼ばれる一種の関数が呼び出されます。コンパイラによって、この関数名や処理の内容は少しずつ違いますが、だいたいの意味において、
void start(void)
{
int argc;
char **argv;
...
/* 初期値付き変数の初期化 */
/* 初期値なし変数のゼロクリア */
/* コマンドライン引数を解析して、argcとargvを組み立てる */
...
stdin = fopen("xxx", "r");
stdout = fopen("yyy", "w");
stderr = fopen("zzz", "w");
...
exit(main(argc, argv));
}
最後に、mainを呼び出して、その返却値をexitに渡していますね。
ここで呼び出しているmainはプログラマが自分で用意しなければなりません。そして、ここで呼び出されているので、プログラマから見れば、最初にmain関数が呼び出されることになるのです。
ここで、mainの返却値(=exit関数の引数)がどのように使われるかは、コンパイラによって異なります。また、exit関数の結果として行われる終了処理がどのようなものになるかもコンパイラに依存します。
No.7
- 回答日時:
冷やかしばかりでもなんですし、すでに書かれている答えも列挙されてますので、場つなぎでも…
コマンドラインから、Cで書かれコンパイルされたプログラムが実行されるとき、main()が直接コールされる訳ではありません。
Cコンパイラはリンカ実行時にC Run Time (crt) Routineと呼ばれるプログラムが、main()開始前に呼び出されるよう実行ファイルを組上げます。
crtは、コマンドラインから引数をとり、
int main(int argc, char *argv[])としたときに、argc, argvが参照できるように値をセットしたり、
static int foo = 2;
のような初期化された変数に値をセットします。
準備ができた段階で、main()をcallします。
ですから、コンパイルするソースコードの中には、main()という関数が1つ必要です。
プログラムが、exit()を実行したり、main()からreturnした時には、crtはその戻り値をコマンドの戻り値としてshell(もしくはcmd.exe等)に戻す手はずをして終了します。
void main(void)のように正しい戻り値がセットされていないときのコマンドの戻り値は、不定です。
要約すると、Cのプログラムはcrtから始まりcrtはmain()をユーザーが定めたスターとアドレスとする決まりになっており、その戻りとはコマンドの戻り値となるので、
int main(void)
int main(int argc, char *argv[])
と書いてプログラムを始める必要があるのです。
No.5
- 回答日時:
ANSI-Cの規格では
hosted environmentにおけるmain()関数は0個または2個の引数を取り、int型の値を返す。
と定義されています。
何らかのOS上で動作するプログラムであれば
int main(void)
int main(int argc, char *argv[])
main(void)
main(int argc, char *argv[])
のいずれかです。
void main(void)が許されている理由は、free standing environmentでは値を受け取るべきOSが存在しないことがありえるからです。
> 小学生でも理解できるくらいに噛み砕いて説明をお願いします。
回答内容からキーワードを抜き出して、自分で調べる努力をしましょう。
小学生でも自分で調べることはできるはずです。
No.4
- 回答日時:
main は、プログラムの初期化部分から呼び出される最初のプログラム(関数)です。
main の前に付くのは、他の関数と同様に関数の返値で、
main の場合、アプリケーションとしてのシェルに対しての返値になります。その返値を使ってシェル(コマンドプロンプトとか)は、プログラムが正常に終了したのかどうかとか判断できます。
規格としてはそのために main はint を返すことになっていますが、
プログラマにとっては特に、シェルで値は利用しない、プログラムの実行だけできればいいというような意味で void にする場合があります。
その場合は、アプリケーションとしては、有意な値を返さないというような意味合いになりますが、main が void であっても、stdlib.hのexit関数を使うことで、値を返している場合があります。
また、プログラムとしては、有意な値を返さないとなっていても、シェルとしてはなんらかの値が返っている場合があります。
main の引数部分については、通常、シェルからの起動時の引数が渡されます。
void になっている場合は、そうした引数を利用しないということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
C++のfor文について
-
visualstudio C# テキストボッ...
-
C++ クラスをメンバにもつクラ...
-
C++でboolにintの値を代入する...
-
typedef enumの使い方を教えて...
-
警告 ”値が割り当てられていな...
-
ハンドルされていない例外が発...
-
構造体の宣言でエラーが出ます。
-
DLLでLIBファイルが作成されない
-
DLLのLPSTR 項目の戻り値の取得...
-
GCCで暗黙の型変換の警告を出し...
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
構造体のあるメンバを基準にソ...
-
スレッドのスケジューリングポ...
-
int main の前のint add(int a,...
-
C言語について質問です。 子プ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
C++のfor文について
-
2重定義って??
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
typedef enumの使い方を教えて...
-
C++でboolにintの値を代入する...
-
プログラムの中で別のmainを呼...
-
構造体の要素すべてに対する四...
-
変数の型を定義しなかった場合...
-
intとINTの違いは?
-
main.c:7:43: warning: implici...
-
【#define】 defineで定義した...
-
構造体の宣言でエラーが出ます。
-
ハンドルされていない例外が発...
-
エラー「invalid conversion fr...
-
void func( void )について
-
関数の実体定義にヘッダファイ...
-
sshdログの意味
-
C言語での方向キー入力判定
おすすめ情報