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を見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハンドルされていない例外が発...
-
2重定義って??
-
DWORDの実際の型は何でしょうか
-
関数の実体定義にヘッダファイ...
-
visualstudio C# テキストボッ...
-
クラスや構造体のarrayを作りた...
-
構造体の宣言でエラーが出ます。
-
long型の定数の末尾にLを付ける...
-
変数の型を定義しなかった場合...
-
VC6でlong longでエラー?
-
main.c:7:43: warning: implici...
-
分割コンパイル時に構造体....
-
【#define】 defineで定義した...
-
構造体のあるメンバを基準にソ...
-
C++のfor文について
-
CStringを含むconst構造体
-
VB 関数
-
C言語エラーの解決法教えてくだ...
-
[C++]継承したクラスのコンスト...
-
エラー「invalid conversion fr...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
C++の(左辺値)参照を参照渡し
-
main()とint main(void)の違い
-
intとINTの違いは?
-
DLLでLIBファイルが作成されない
おすすめ情報