dポイントプレゼントキャンペーン実施中!

 お早う御座います、Cの初心者です、宜しくお願いします。

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

A 回答 (4件)

>main関数は、「int main(void)」という風に始まります



そうとは限りません。実行時に引数を受け取るため

int main(int argc, char **argv)
または
int main(int argc, char *argv[])
などのような書き方があります。

というわけで、

>main関数がstring型をとる場合

おっしゃっている内容に近いことができます。
上のような書き方で、main関数の第2引数には引数で与えた各文字列へのポインタが入ります。

>他の関数から呼ばれる場合

あります。
main関数から例えばfuncという関数を呼び出し、
そのfuncからmainを再帰的に呼び出すことができます。
再帰呼び出しの場合、無限ループに陥らないようにする施策が当然のことながら必要です。
    • good
    • 1

こういう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系であれば、お試しあれ。
    • good
    • 0

以下,ホスト環境における話です。


# フリースタンディング環境ではスタートアップすら自由なので。

<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」)
という方針で書くのがよいと思います。
    • good
    • 0

お疲れ様です。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!