OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

int main(int argc, char* argv[]) についての質問

  • 困ってます
  • 質問No.125491
  • 閲覧数5011
  • ありがとう数5
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 47% (9/19)

こんにちは.つね日ごろ思っている質問させてください.
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関数の意味と,その使い方について
アドバイスお願い致します.
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル14

ベストアンサー率 50% (1122/2211)

> (1)
> void main(void)
  ...
> (2)
> int main(int argc, char* argv[])
  ...
> の2つのパターンが記載されていますが,どういう違いがあるのでしょうか?

(1) は、間違いです。少なくとも ANSI-C の規格に合致していません。

main() は、特別な関数で、ANSI-C の規格では以下の三通りのうちのどれか
でなくてはいけない、と定められています。

int main(void)
int main(int argc, char *argv[]);
int main(int argc, char *argv[], char *envp[]);

因みに三番目の形式では、三つ目の引数には環境変数が入ります。
以下のようなコードで確認ができます。

int main(int argc, char *argv[], char *envp[])
{
  int i = 0;
  while (envp[i]) {
    printf("envp[%d] = '%s'\n", i, envp[i]);
    ++i;
  }
  return 0;
}


> ※Turbo Cなどのコンパイラーでは,return文がないと警告出ます

Turbo C は、規格に厳格なのでしょう。返り値が void なのはおかしいので、
int だとみなすよ、という警告も出てるはず。で、int が帰り値だとみなし
ているので return が無いと、返り値が不定になるよ、と警告を出している
のでしょう。
お礼コメント
taroimoten

お礼率 47% (9/19)

a-kumaさま、詳しい説明ありがとうございましたっ!!


>因みに三番目の形式では、三つ目の引数には環境変数が入ります。
>以下のようなコードで確認ができます。

↑の環境変数とは、どういったもので、またその機能とか
おしえてもらえませんでしょうか?

よろしくお願いします!
投稿日時 - 2001-08-28 20:18:05
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル13

ベストアンサー率 40% (404/988)

こんにちは。 >特に(2)の場合のmain関数の意味と,その使い方について 書籍にもあると思いますが、プログラムに渡す「コマンドライン引数」です。 argcには、渡された引数の数 argvには、渡された引数の文字列 画格納されています。 argc[0] には、最初の引数 argv[argc -1←(配列は0から始まる為)]には、最後の引数が入ります。 例) progra ...続きを読む
こんにちは。

>特に(2)の場合のmain関数の意味と,その使い方について
書籍にもあると思いますが、プログラムに渡す「コマンドライン引数」です。

argcには、渡された引数の数
argvには、渡された引数の文字列
画格納されています。

argc[0] には、最初の引数
argv[argc -1←(配列は0から始まる為)]には、最後の引数が入ります。

例)
program.exe aaa.txt bbb.txt ccc.txt
というのは
argc[0] には、"aaa.txt"
argv[argc -1] "ccc.txt"
が、格納されます。

感じ掴めますか?
がんばってくださいね。Cをやる上で、必要なところなんで。
でわでわ。
補足コメント
taroimoten

お礼率 47% (9/19)

Haizyさん,さっそくのアドバイスありがとうございます.

int main(int argc, char* argv[])
の引数は,Haizyさんの示した以下の例,
例)
program.exe aaa.txt bbb.txt ccc.txt
では,
argc には,渡された引数の数,具体的には,aaa.txt,bbb.txt,ccc.txtの合計
数,3が代入されることになり,

argv[0] には, aaa.txt
argv[1] には, bbb.txt
argv[2] には, ccc.txt

が代入されるという理解で正しいでしょうか??
投稿日時 - 2001-08-28 11:16:38
  • 回答No.2
レベル9

ベストアンサー率 36% (37/102)

argc: 4 argv[0]: program.exe argv[1]: aaa.txt argv[2]: bbb.txt argv[3]: ccc.txt です。 i=0; while(argv[i]!=NULL){ printf("argv[%d]: %s\n", i, argv[i]); i++; } で確認してみてください。
argc: 4
argv[0]: program.exe
argv[1]: aaa.txt
argv[2]: bbb.txt
argv[3]: ccc.txt
です。

i=0;
while(argv[i]!=NULL){
printf("argv[%d]: %s\n", i, argv[i]);
i++;
}

で確認してみてください。
  • 回答No.3
レベル8

ベストアンサー率 51% (21/41)

VCの場合は void main(int argc, char **argv) {   for (int lLoop = 0; lLoop<argc; lLoop++) {    printf("argv[%d] = %s\n",lLoop,argv[lLoop]);   } } test aaa bbb ccc argv[0] ...続きを読む
VCの場合は

void main(int argc, char **argv)
{
  for (int lLoop = 0; lLoop<argc; lLoop++) {
   printf("argv[%d] = %s\n",lLoop,argv[lLoop]);
  }
}

test aaa bbb ccc
argv[0] = C:\C++OO\test\Debug\test.exe
argv[1] = aaa
argv[2] = bbb
argv[3] = ccc
  • 回答No.5
レベル14

ベストアンサー率 50% (1122/2211)

> 環境変数とは、どういったもので、 Turbo C を使っているならば、コマンドプロンプトを意識してますよね。 あの OS の環境変数がそっくり渡ってきます。 set コマンドで表示される PATH だとか TEMP だとかっていう、あれ、です。 ...続きを読む
> 環境変数とは、どういったもので、

Turbo C を使っているならば、コマンドプロンプトを意識してますよね。
あの OS の環境変数がそっくり渡ってきます。

set コマンドで表示される PATH だとか TEMP だとかっていう、あれ、です。
お礼コメント
taroimoten

お礼率 47% (9/19)

a-kumaさん、たびかさなる解説ありがとうございます。
a-kumaさんの解説は非常にわかりやすくて理解することができました。
教えていただいたことをもとにもっと知識を深めたいと思います。
どうもありがとうございました。
なお、他のアドバイス頂いた方々に感謝いたします!!

それでは★
投稿日時 - 2001-08-29 10:06:01
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ