![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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を再帰的に呼び出すことができます。
再帰呼び出しの場合、無限ループに陥らないようにする施策が当然のことながら必要です。
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」)
という方針で書くのがよいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sshdログの意味
-
long型の定数の末尾にLを付ける...
-
void func( void )について
-
関数のアドレスをコピーするこ...
-
プログラムの中で別のmainを呼...
-
STLのsortで、プライベート変数...
-
ハンドルされていない例外が発...
-
typedef enumの使い方を教えて...
-
voidについて
-
APIENTRY と WINAPI
-
DWORDの実際の型は何でしょうか
-
main.c:7:43: warning: implici...
-
#defineについて
-
【C++クラス設計】ある関数の引...
-
int main(void) の意味につ...
-
visualstudio C# テキストボッ...
-
変数の型を定義しなかった場合...
-
AtCoderABC135の問題Cについて
-
信頼区間の1.96や1.65ってどこ...
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
C++のfor文について
-
visualstudio C# テキストボッ...
-
typedef enumの使い方を教えて...
-
C++でboolにintの値を代入する...
-
構造体の要素すべてに対する四...
-
main.c:7:43: warning: implici...
-
変数の型を定義しなかった場合...
-
intとINTの違いは?
-
ハンドルされていない例外が発...
-
構造体の宣言でエラーが出ます。
-
プログラムの中で別のmainを呼...
-
関数の実体定義にヘッダファイ...
-
【#define】 defineで定義した...
-
C++ クラスをメンバにもつクラ...
-
VC6でlong longでエラー?
-
void func( void )について
-
エラー「invalid conversion fr...
おすすめ情報