• ベストアンサー

int main(void)

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

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

  • ベストアンサー
  • mneko
  • ベストアンサー率33% (46/139)
回答No.1

c言語では、非筒のプログラムで1対のmain関数が必要です、ようはmain関数から 実行されるわけで、int main(void)とは、このmain関数は整数型の関数で仮引数を 貰わない(void)という事です。 普通関数は何かのデータを貰ってそのデータを元に決まられた処理をして、その結果を呼び出した側に答えを戻してやる訳で、関数の型には、実数型、整数型、文字型、またそれぞれのポインタ型が使えます、その他構造体などがありますが! main関数の戻し値は、OSで受けることができ普通正常に終了すると「0」を 以上終了の時は「-1」を戻しますので、main関数ではDoubleは使わないと思います。 又、main関数の仮引数は void main( int argc, char argv[])等と書き、コマンドモードで実行した時の引数の数を argcに引数の文字をargv[0]これはプログラムそのもの、1つ目の引数が argv[1]に格納されてます。 ちなみに、MS-DOSコマンドプロンプットを開いて、 c:\windows>notepad t.txt[enter]と入力してみてください、 「t.txtが見つかりません作成しますか」と表示され「ok」とクリックすると 「t.txt]が作られます。

amuro_78
質問者

お礼

ありがとうございます。

その他の回答 (4)

  • hjoshua
  • ベストアンサー率66% (6/9)
回答No.5

基本的にCでは、関数のプロトタイプ宣言で引数を全く書かないと、それは引数がないというよりも、引数が何でもよい、という意味になります。たとえば、 int foo(); と宣言しておいて、あとで、 foo(4); として、fooという関数を呼び出してもエラーになりません。関数の戻り値だけを規定したい場合は、これが使えるわけです。しかし、引数はとってはいけないということを厳密に書きたい場合は、 int foo(void); と宣言しなければなりません。 しかしながら、mainはまず、ユーザのコードから呼ばれることはありませんね。従って、 int main(); と、 int main(void); はほぼ同じ意味です。

amuro_78
質問者

お礼

ありがとうございます、fooってなんですか?

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.4

標準Cの言語仕様には「型を省略した関数はint型として解釈される」という規約があります。 結果として、 main(void) は int main(void) の省略形です。 標準CにおけるHosted Environmentでは ・mainは0または2つの引数をとる voidかint argc, char *argv[] ・intの値を返す int main(void)かint main(int argc, char *argv[])である という2つの規約があります。 よって、hosted environmentにおいてはint型でないmain関数はありえません。

amuro_78
質問者

お礼

ありがとうございます。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

int main(void)    main(void)    main() はどれも同じです。 関数に入力を与えないで関数の結果をmainからOS(デスクトップのコマンドライン)に返すものです。コマンドラインへの戻り値は無くても構いません。

amuro_78
質問者

お礼

ありがとうございます。

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.2

ANSI-Cでは、main関数はint型で、第1引数はint型、第2引数は文字列配列と なっています。ですから、ANSI-Cに準拠して書けば、  int main(int argc, char *argv[]) と書くのが正しいのです。 ・argcは、引数の数 ・argv[]は、引数の値(第0引数~) test aaa bbb として起動すると argc=3、argv[0]=test、argv[1]=aaa、argv[2]=bbb となります。 http://member.nifty.ne.jp/Ryuz/c/about_ansi.html http://member.nifty.ne.jp/Ryuz/c/about_main.html >(void)ってなんですか? main(void) と書くと引数なしということになります。 >int mainというのはint型の関数だと思うのですが、なかではdouble型とかも使えます。 関数の型は、関数が呼び出し側に戻す値(戻り値)のかtです。(returnで指定する) 中で、扱うデータの型とは関係ありません。

amuro_78
質問者

お礼

ありがとうございます。 中の変数とは関係ないのですか、