• ベストアンサー

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
質問者

お礼

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

関連する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関数がstring型をとる場合とか、実際に他の関数から呼ばれる場合は有るのでしょうか。

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

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

  • int main(int argc, char* argv[]) についての質問

    こんにちは.つね日ごろ思っている質問させてください. Cの参考書には, (1) void main(void) { } (2) int main(int argc, char* argv[]) { return 0; } の2つのパターンが記載されていますが, どういう違いがあるのでしょうか? (1)の場合main関数は,型を持たず,引数も持たない. ※Turbo Cなどのコンパイラーでは, return文がないと警告出ます. (2)の場合は,int 型をかえし,引数はint型 変数と char型ポインタ配列(?) を指定している. といったくらいしか分かりません. (2)に関してもう少し述べれば, コマンドラインからファイルを指定し,実行することが できると勉強した記憶があるのですが, 理解があいまいです. 特に(2)の場合の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型 void型について

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

  • main関数の事についてお聞きします。

    Windowsのプログラムを書くとき、下のようにキッチリ戻り値や引数を書かなくてはならないのに int WINAPI WinMain( HINSTANCE hInstance, // 現在のインスタンスのハンドル HINSTANCE hPrevInstance, // 以前のインスタンスのハンドル LPSTR lpCmdLine, // コマンドライン int nCmdShow // 表示状態 ); C言語で書かれたプログラムは int main(int argc, char *argv[]) ではなく、 int main(void) や void main(void) または int main() や main() だけのモノなど、 いろいろです。 main関数は、関数なのに戻り値や引数を省略して書ける仕様なのは、なぜなのか? ちょっと疑問に思ったのでこちらにお尋ねしました。

  • main関数について

    最近C言語を勉強し始めた者です。 main関数について分からないことがあるので質問致します。main関数は自作関数ですよね。ということは自由に引数を決めていいのですか?つまり int main(int argc , char *argv[]) 以外の引数を決めることは出来るのでしょうか。

  • "main"について

    "main"についての質問です。 今まで私は"main"というのはC言語の予約語の一つだと思い込んでいましたので、"main"は変数名には使えないと思っていました。 ところが以下のようなプログラムを実行してみると問題なくコンパイル出来る上に問題なく実行できました。 int main(void) { int main; main = 300; printf("%d\n", main); return 0; } 確かに入門書などを見直してみると、予約語の中に"main"はありませんでしたし、関数名が変数名として使えないとは書いて無いように思います。 でもなんだかしっくりきません。(^^;) 関数ポインタを使う際などは、変数=関数名(p = myfunction)などと書いたりするので、main関数が格納されているメモリなど変なところを書き換えたりしている可能性があるような気がしたのですが、うまく確認する方法を思いつきませんでした・・・。 ただたんに変数が優先的に処理されているだけというのなら納得するしかないのですが。 どなたか詳しい方がいたら教えてください。よろしくお願いします。