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件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
> 環境変数とは、どういったもので、
Turbo C を使っているならば、コマンドプロンプトを意識してますよね。
あの OS の環境変数がそっくり渡ってきます。
set コマンドで表示される PATH だとか TEMP だとかっていう、あれ、です。
この回答へのお礼
a-kumaさん、たびかさなる解説ありがとうございます。
a-kumaさんの解説は非常にわかりやすくて理解することができました。
教えていただいたことをもとにもっと知識を深めたいと思います。
どうもありがとうございました。
なお、他のアドバイス頂いた方々に感謝いたします!!
それでは★
No.4ベストアンサー20pt
> (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 が無いと、返り値が不定になるよ、と警告を出している
のでしょう。
この回答へのお礼
a-kumaさま、詳しい説明ありがとうございましたっ!!
>因みに三番目の形式では、三つ目の引数には環境変数が入ります。
>以下のようなコードで確認ができます。
↑の環境変数とは、どういったもので、またその機能とか
おしえてもらえませんでしょうか?
よろしくお願いします!
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
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.1ベストアンサー10pt
こんにちは。
>特に(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
が代入されるという理解で正しいでしょうか??
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











