• ベストアンサー

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

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

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答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

専門家に質問してみよう