• ベストアンサー

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

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

  • htgo
  • お礼率33% (407/1224)

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.2

>main関数は、「int main(void)」という風に始まります そうとは限りません。実行時に引数を受け取るため int main(int argc, char **argv) または int main(int argc, char *argv[]) などのような書き方があります。 というわけで、 >main関数がstring型をとる場合 おっしゃっている内容に近いことができます。 上のような書き方で、main関数の第2引数には引数で与えた各文字列へのポインタが入ります。 >他の関数から呼ばれる場合 あります。 main関数から例えばfuncという関数を呼び出し、 そのfuncからmainを再帰的に呼び出すことができます。 再帰呼び出しの場合、無限ループに陥らないようにする施策が当然のことながら必要です。

その他の回答 (3)

回答No.4

こういうmain関数の例もあります。 int main(int argc, char *argv[], char *env[]) 以下のように使用します。 #include <stdio.h> int main(int argc, char *argv[], char *env[]) { while (*env != NULL) { printf("%s\n", *env); env++; } return 0; } 環境がwindows系であれば、お試しあれ。

回答No.3

以下,ホスト環境における話です。 # フリースタンディング環境ではスタートアップすら自由なので。 <main関数の型について> 標準Cおよび標準C++では,プログラムはグローバルな ・int main (void) { /* ... */ } ・int main (int argc, char * argv[]) { /* ... */ } またはそれらに等価な定義を持つか,もしくは処理系定義 (つまりはコンパイラ依存) の定義を持つ必要があります。 また,標準C++において,グローバルなmain関数を多重定義する事は禁止されています。 # ISO/IEC 9899:1999 5.1.2.2.1 Program startup / Paragraph. 1 # ISO/IEC 14882:2003 3.6.1 Main function / Paragraph. 2 <main関数のユーザーコードによる呼び出しについて> ・標準Cにmain関数の呼び出しに関する制限は存在しませんので,ユーザーコードから呼び出す事ができます ・標準C++では,グローバルなmain関数をユーザーコードから呼び出す事はできません # ISO/IEC 14882:2003 3.6.1 Main function / Paragraph. 3 なお,この違いについて標準は, >Rationale: The main function may require special actions. >Difficulty of converting: Trivial: create an intermediary function such as mymain(argc, argv). >How widely used: Seldom と言っています。 # ISO/IEC 14882:2003 Annex.C Compatibility - C.1 C++ and ISO C - C.1.2 Clause 3: basic concepts 自分で書く場合は ・main関数はint main (void) { /* ... */ }またはint main (int argc, char *argv[]) { /* ... */ }の形にする ・main関数を他から呼ばない ・main関数が他から呼ばれる事は想定しない (C++標準化委員会曰く「seldom」) という方針で書くのがよいと思います。

回答No.1

お疲れ様です。 過去の質問は検索してみましたか? 【教えて!検索】で【このカテゴリーから検索】をすれば、答えが出ると思うのですが。。。

関連するQ&A

  • int main(void)

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

  • 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はすべきではないとなんかの本で読んだのですが・・。

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

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

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

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

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

  • 「void ( *signal(int sig, void (*func)(int)) ) (int)」の (int)

    signal関数の書式についてですが、   void ( *signal(int sig, void (*func)(int)) ) (int); 最後に付く(int)は一体何でしょうか? このような関数の書式ははじめて見ました。 UNIX系の何かでしょうか。 回答よろしくお願いします。

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

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

専門家に質問してみよう