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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
visualstudio C# テキストボッ...
-
enumについて
-
構造体の要素すべてに対する四...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
エラー「invalid conversion fr...
-
gccのエラー "initialization d...
-
VC6でlong longでエラー?
-
直接アドレス指定のポインタの...
-
構造体の宣言でエラーが出ます。
-
配列を用いない最大値の求め方
-
スレッドのスケジューリングポ...
-
警告「代入される前に使われて...
-
TCP/IPでのgetsockname()の使い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
C++でboolにintの値を代入する...
-
関数の実体定義にヘッダファイ...
-
main.c:7:43: warning: implici...
-
構造体の要素すべてに対する四...
-
変数の型を定義しなかった場合...
-
void func( void )について
-
【#define】 defineで定義した...
-
VC6でlong longでエラー?
-
0除算を判定したい
-
プログラムの中で別のmainを呼...
-
C言語のコンパイルエラー
-
構造体の宣言でエラーが出ます。
-
intとINTの違いは?
-
DLLでLIBファイルが作成されない
おすすめ情報