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で質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
2重定義って??
-
C++のfor文について
-
long型の定数の末尾にLを付ける...
-
構造体の要素すべてに対する四...
-
visualstudio C# テキストボッ...
-
変数の型を定義しなかった場合...
-
64bit → 32bit型へのキャスト
-
typedef enumの使い方を教えて...
-
intとINTの違いは?
-
配列を用いない最大値の求め方
-
関数の実体定義にヘッダファイ...
-
C言語 宣言した変数になにも代...
-
regexでエラー
-
C++ クラスをメンバにもつクラ...
-
相互参照するクラス、俺こんな...
-
ハンドルされていない例外が発...
-
WM_NOTIFYのメッセージクラッカー
-
void func( void )について
-
【#define】 defineで定義した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
typedef enumの使い方を教えて...
-
visualstudio C# テキストボッ...
-
C++のfor文について
-
関数の実体定義にヘッダファイ...
-
構造体の要素すべてに対する四...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
変数の型を定義しなかった場合...
-
intとINTの違いは?
-
main.c:7:43: warning: implici...
-
void func( void )について
-
C言語 宣言した変数になにも代...
-
【#define】 defineで定義した...
-
構造体の宣言でエラーが出ます。
-
C言語での方向キー入力判定
-
プログラムの中で別のmainを呼...
-
C言語について質問です。 子プ...
おすすめ情報