- ベストアンサー
int main(int argc, char* argv[]) についての質問
こんにちは.つね日ごろ思っている質問させてください. 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)
- 専門家の回答
質問者が選んだベストアンサー
> (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 が無いと、返り値が不定になるよ、と警告を出している のでしょう。
その他の回答 (4)
- a-kuma
- ベストアンサー率50% (1122/2211)
> 環境変数とは、どういったもので、 Turbo C を使っているならば、コマンドプロンプトを意識してますよね。 あの OS の環境変数がそっくり渡ってきます。 set コマンドで表示される PATH だとか TEMP だとかっていう、あれ、です。
お礼
a-kumaさん、たびかさなる解説ありがとうございます。 a-kumaさんの解説は非常にわかりやすくて理解することができました。 教えていただいたことをもとにもっと知識を深めたいと思います。 どうもありがとうございました。 なお、他のアドバイス頂いた方々に感謝いたします!! それでは★
- nakashi
- ベストアンサー率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] = C:\C++OO\test\Debug\test.exe argv[1] = aaa argv[2] = bbb argv[3] = ccc
- cherry_moon
- ベストアンサー率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++; } で確認してみてください。
- Haizy
- ベストアンサー率40% (404/988)
こんにちは。 >特に(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をやる上で、必要なところなんで。 でわでわ。
補足
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 が代入されるという理解で正しいでしょうか??
お礼
a-kumaさま、詳しい説明ありがとうございましたっ!! >因みに三番目の形式では、三つ目の引数には環境変数が入ります。 >以下のようなコードで確認ができます。 ↑の環境変数とは、どういったもので、またその機能とか おしえてもらえませんでしょうか? よろしくお願いします!