• ベストアンサー

void main (void)について、、、

またまたすみません。 プログラムを書くときに、   void main (void)   と、とりあえず最初にこれを書く、と覚えていて意味がわかりません。 小学生でも理解できるくらいに噛み砕いて説明をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答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) 余談ですが、パルプンテなども、内部ではおそらく乱数なんかを発生させているんでしょうね~。ゲームプログラミングの方は一度もしたことがないので、あくまで想像ですけど。

moncyasan
質問者

お礼

>HPがフルに回復 main (ベホマ) >メタルキングの剣 main (37000G) なんとなくイメージがわきました。 ご返答ありがとうございました。

その他の回答 (7)

  • jacta
  • ベストアンサー率26% (845/3158)
回答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関数の結果として行われる終了処理がどのようなものになるかもコンパイラに依存します。

moncyasan
質問者

お礼

ご返答ありがとうございました。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答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[]) と書いてプログラムを始める必要があるのです。

moncyasan
質問者

お礼

ご返答ありがとうございました。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答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が存在しないことがありえるからです。 > 小学生でも理解できるくらいに噛み砕いて説明をお願いします。 回答内容からキーワードを抜き出して、自分で調べる努力をしましょう。 小学生でも自分で調べることはできるはずです。

moncyasan
質問者

お礼

ご返答ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

main は、プログラムの初期化部分から呼び出される最初のプログラム(関数)です。 main の前に付くのは、他の関数と同様に関数の返値で、 main の場合、アプリケーションとしてのシェルに対しての返値になります。その返値を使ってシェル(コマンドプロンプトとか)は、プログラムが正常に終了したのかどうかとか判断できます。 規格としてはそのために main はint を返すことになっていますが、 プログラマにとっては特に、シェルで値は利用しない、プログラムの実行だけできればいいというような意味で void にする場合があります。 その場合は、アプリケーションとしては、有意な値を返さないというような意味合いになりますが、main が void であっても、stdlib.hのexit関数を使うことで、値を返している場合があります。 また、プログラムとしては、有意な値を返さないとなっていても、シェルとしてはなんらかの値が返っている場合があります。 main の引数部分については、通常、シェルからの起動時の引数が渡されます。 void になっている場合は、そうした引数を利用しないということです。

moncyasan
質問者

お礼

ご返答ありがとうございました。

  • secretd
  • ベストアンサー率39% (50/126)
回答No.3

プログラムを実行して最初に実行するブロックを示すためのもの,といえばわかりやすいですか?そこからメインの中だけだったり,ほかの関数を呼び出したりして処理を進めます. 今は,たいてい int main(int argc, char **argv) と書くんじゃないですかね.コマンドラインから引数を与えると, argc がさす先に引数が文字列で格納されます.

moncyasan
質問者

お礼

ご返答ありがとうございました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 小学生でも理解できるくらいに噛み砕いて説明をお願いします。 まちがっておぼえているので、もういちどよくべんきょうしなおしましょう。

moncyasan
質問者

お礼

ご返答ありがとうございました。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

とりあえず、 int main(void) でしょ。

moncyasan
質問者

お礼

ご返答ありがとうございました。

関連するQ&A

  • main()とint main(void)の違い

    最初main()と習ったのですが、最近学校でmain()ではなくint main(void)を使うように なりました。 どのように違うのでしょうか? main関数のところに引数が入っている意味がわかりません。 (void)ってなんですか? そもそも引数って何ですか? あと、プログラムの最後にreturn(0)って書いてあるんですが、これはどういう意味ですか? 回答よろしくお願いします。

  • int main()、void main()、void main(void)、int main(void)

    今日、大学でC言語の講義の時間、先生が、 #include <stdio.h> void main(void){ } と宣言してプログラムを書くと教えていました。 main関数には、 main() void main() void main( void ) int main() int main( void ) と、人によりいくつかの描き方があったりします。 どれが本当は正しいのでしょうか? void mainはすべきではないとなんかの本で読んだのですが・・。

  • int main(void)

    C言語の問題集をやっているのですが、 本にはmain関数の最初にint main(void)のような書き方が してあります。 学校ではmain() と習ったのですが、本には上のようにかいてあります。 どのように違うのでしょうか? というかmain関数のところに引数が入っている意味がわかりません。 どういうことがというと(void)ってなんですか? またint mainというのはint型の関数だと思うのですが、 なかではdouble型とかも使えます。 お願いします。

  • int型 void型について

    C初心者です。 「int main(voido)」や「void main(void)」がよくわかりません。 int、void、(void)とは返り値を返す、返さないということが理解できません。小学生でもわかる説明をしていただけないでしょうか? よろしくお願いいたします。 

  • int void (main)の意味・・・

    僕が今習っている学校では、『#include <stcio.h>』のあとに『void main()』と書きます。※『;』はつけません。 しかし、参考書などを見ると、『int main(void);』と書いてあります。これ(int main(void))はどういう意味なのかが知りたいのですが・・・。 あとできれば、『void main()』との違いも書いてくれれば幸いなのですが・・・。 回答お願いします。

  • void main()って誰が最初?:ANSI-C

    ANSI-C言語に関することです。 ベンダー拡張やOS固有機能は除外してください。 よく、書籍でvoid main(void)と書いたサンプルを見かけます。 プログラミング言語Cではint main(void)だし、C言語FAQでも「void main(void)は間違いである」と書いてあるのに…。 過去の質問への回答で「ANSI-Cでは…」と解説している人がいたのでANSI-Cの仕様を調べてもint main(void)の方が正しいように書かれていました。 これだけ資料が揃っているのにいまだにvoid main(void)と書かれた書籍がイッパイあるのはなぜなんでしょう? 最初にvoid main(void)って書いた人がものすごく影響力のある人だったのか?と想像してしまいます。 いったい誰が最初にvoid main(void)と書き始めたのでしょうか?

  • int main(void) の意味について教えて下さい

     お早う御座います、Cの初心者です、宜しくお願いします。  最初にmain関数は、「int main(void)」という風に始まりますが 、main関数がstring型をとる場合とか、実際に他の関数から呼ばれる場合は有るのでしょうか。

  • public static void main (String args[])

    基本すぎて申し訳ありませんが、 public static void main (String args[])とはどういう意味を持っていますか? 教えてください。。

    • ベストアンサー
    • Java
  • public static void main...のvoidってここではどういう意味なんでしょうか?

    public static void main...のvoidってここではどういう意味なんでしょうか? ちなみに辞書だとこんな意味がありました。 void 【名】 1. 空間{くうかん}、空洞{くうどう}、真空{しんくう}、くぼみ、虚空{こくう}、すき間、間隙{かんげき}、空隙(率){くうげき(りつ)}、空所{くうしょ}、孔隙{こうげき} 2. 空虚感{くうきょかん}、むなしさ、喪失感{そうしつ かん} 【形】 1. 欠けた、空の、何もない、中空{ちゅうくう}の◆【類】empty 2. 空虚{くうきょ}な、うつろな 3. 無効{むこう}の、役立たず{やくたたず}の 4. 持ち主のない 【自動】 排尿{はいにょう}する、排便{はいべん}する 【他動】 1. ~を無効{むこう}にする、取り消す 2. ~を放出{ほうしゅつ}する、排せつする、放尿{ほうにょう}する

    • ベストアンサー
    • Java
  • public static void main(String args

    public static void main(String args[]) { と public static void main(String[] args) { は何が違います?

    • ベストアンサー
    • Java

専門家に質問してみよう