• ベストアンサー

int main()の・・・

初心者です。 ものすごく基本的な質問なんですが、 int main() のint型は、どういった意味なんでしょうか? char main() はだめなんでしょうか? それと ()内意味はなんでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.5

int main(...)のintは、 OSに返すエラーレベルです。 プログラムを実行する場合、実行する側(たとえば、WindowsXPでは「コマンドプロンプト」) に対し、動作の状況を返答したいことがあります。 そのとき、returnの返り値で動作の状況(エラーレベル)を返すことができます。 エラーレベルは、コマンドプロンプトで >echo %errorlevel% とすれば確認することができます。 まあ、動作の状況を返したいことはあまりないのですが、 念のためというか、便利のためにそうなっています。 サンプルプログラム ------------------------ int main(int argc, char *argv[]){ return 10; } ----------------------- これをコンパイルして、実行した直後、 echo %errorlevel%と入力してください。 「10」と表示されるはずです。 (returnのあとの数を変えれば、1でも20でも返せます) charではだめです。C言語の規格で、main関数の返り値はintであることが決まっています。 (voidやcharにしても動く場合もあるかもしれませんが、 規格ではそう決まっているということです) main関数のカッコの中は、規格では int main(void) か int main(int argc, char *argv[]) となります。(C言語規格 JIS X3010 §5.1.2.2.1より) 前者は、プログラム起動時にオプションを渡さなくていい場合。 後者は、オプションを渡す場合。 オプションは文字列としてプログラムに渡されます。 説明するよりやったほうが早い。以下のプログラムをコンパイルしてみてください。 ------------------------------ #include <stdio.h> int main(int argc, char *argv[]){ int i; for(i = 0; i < argc; i++){ printf("%d : %s\n", i, argv[i]); } return 0; } --------------------------- そして、(たとえば、prog.exeという実行ファイルができたとすると)、 コマンドプロンプトから >prog.exe abc de fg 123 456 のようにオプション付きで起動してください。 argc, argvがどのように使われているかわかると思います。

その他の回答 (6)

回答No.7

少々補足です。 C言語では、 仮引数のない () は、「引数をチェックしない」ことを意味します。引数がないことを明示するためには、void を仮引数の型にします。 C++では、仮引数のない () は、「引数がない」ことを明示します。(void でも同じ意味になります)

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

Cがコンパイルされ、リンクされた実行ファイルはshellから呼ばれたとき、main()から実行されるわけではありません。 初期化された変数に値をセットするC Run Time (crt)というプログラムがリンクされ、crtがmain()を呼び出す形で実行されます。 crtは、main()がintを返す関数であることを想定して、プログラムされていますので、crtを書き換えない限りmain()は、戻り値としてintを返さなければいけません。 Cがmain()から実行されること自体crtがそうプログラムされているからです。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.4

ANSI Cの仕様では、main関数の定義方法として > int main(void) { /* ... */ } > int main(int argc, char * argv[]) { /* ... */ } > 上の二つのいずれかと等価な方法 > 上の三つのいずれでもない処理系定義の方法 の4通りを上げています。 従って No.3 で書かれている > void main(void) という書き方は使う処理系で許されていれば間違ってはいませんが移植性の高い書き方ではありません。 また普通は > char main(void) を使える処理系はないと思います。

  • sueno
  • ベストアンサー率23% (8/34)
回答No.3

Cではプログラムのメインルーチンである、main()も関数として扱います。 int main() とは、mainも関数なので返り値がありますので、それがint型である、という定義をしているという意味です。 もちろん、 char main() でもよいですが、その場合はmain()を終了する際に必ずreturn分でchar型の返り値を返してください。 ()の中がないのは、引数がないという意味です。 ↓のURLでは、 void main(void) という書き方を推奨しています。 void は、返り値、引数がないということを明示的に定義するという意味です。

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec11.html
回答No.2

Sorry, 誤:以上終了 正:異常終了

回答No.1

一般的に(?)プログラムは正常終了すると0を、以上終了すると0以外を返します。そのためのintです。 main関数の引数は、(int argc, char *argv[])です。 argcは実行時の引数の数、argvは引数の文字列だと思っちゃって良いと思います。 ただし、これは必要ないときには省略できるので、int main() と書いても動きます。

関連するQ&A

  • main(int argc,char **argv[])の意味を教えて下さい

     今晩は、Cの初心者です宜しくお願いします。  main関数の引数で、int main(int argc,char **argv[])とint main(int argc,char *argv[])と書かれている場合がありますが、 「**argv」と「*argv」の意味の違いはどのようなもので、どのように使い分けるのでしょうか。 また、必ずポインタ型でとるという決まりでしょうか。 宜しくお願いします。

  • 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関数の意味と,その使い方について アドバイスお願い致します.

  • int main(void)

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

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

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

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

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

  • 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型とchar型について

    C言語初心者です。 よろしくお願いします。 ◎1----------------------- #include<stdio.h> int main(void) { int ss[4]="789"; printf("%c\n",ss[0]); return 0; } --------------------------- ◎2----------------------- #include<stdio.h> int main(void) { int *p; p="789"; printf("%c\n",*p); return 0; } --------------------------- ◎1、◎2の2つのプログラムについて疑問があります。 ◎1の「int ss[4]="789";」と◎2の「int *p;」のintの部分は今まで、何の疑問も抱かず、「char」として入力していました。 そこでchar型は1バイトの整数、int型は4バイトの整数ということで容量が違うだけで、intとしても大丈夫だろうと思ったのですが、 ◎1では、「'initializing' : 'char [4]' から 'int [4]' に変換することはできません。」とエラーが出て、◎2では「'char [4]' から 'int *' に変換することはできません。」とエラーが出ます。 intは文字列は扱えないということなのでしょうか? 以上intだと実行できない理由がわかりません。 初歩的なことですいませんが、教えていただけると嬉しいです。

  • main の引数には const 付けた方が

    C言語での質問です。 引数を取るような main 関数は int main( int argc, char *argv[]){~} とされていますが、argvの指す文字列を変更する、というのはいくら何でもまずいので、 int main( int argc, const char *argv[]){~} あるいは int main( int argc, const char const * const * argv){~} の方がいいのではないでしょうか? 何故、constを付けない形が出回っているのでしょうか?

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

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

  • main関数について

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