合計 昨日 今日

コマンドライン引数がよくわらかない

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: gumi
[URL]
Date: 2017年12月12日(火) 13:05
No: 1
(OFFLINE)

 コマンドライン引数がよくわらかない

市販のテキストを読んだところ
コマンドライン引数は
int main(void)と
main(int argc, char *argv[])
の二種類書き方があると知りました。

両者の違いがよく分からないので、使い分け方法について出来る限り平易な説明をしていただけないでしょうか?

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,492,118 ポイント)
Date: 2017年12月12日(火) 22:34
No: 2
(OFFLINE)

 Re: コマンドライン引数がよくわらかない

C言語では一般的にmain関数を

int main(void) {
//略
}



int main(int argc, char *argv[]) {
//略
}

で書きます。
(ただ実装定義の方法でもいいのでこれ以外でも構わないことになっていますし、CとC++でも違いがありますが、そのようなことはこの際置いておきます)

コマンドラインから引数を受け取りたいときは後者を使えばいいでしょうし、その必要が無いなら前者でよいでしょう。

Name: かずま
[URL]
Date: 2018年1月13日(土) 14:42
No: 3
(OFFLINE)

 Re: コマンドライン引数がよくわらかない

gumi さんが書きました:市販のテキストを読んだところ
コマンドライン引数は
int main(void)と
main(int argc, char *argv[])
の二種類書き方があると知りました。

質問に誤りがあります。

main関数の引数は
int main(void) と
int main(int argc, char *argv[])

のはずです。

gumi さんが書きました:両者の違いがよく分からないので、使い分け方法について出来る限り平易な説明をしていただけないでしょうか?

コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    if (argc < 2)
        puts("What's your name?");
    else {
        printf("Hello,");
        for (int i = 1; i < argc; i++)
            printf(" %s", argv[i]);
        printf(".\n");
    }
    return 0;
}

実行例
コード[Text]: 全て選択
1
2
3
4
5
$ gcc -o name name.c
$ ./name
What's your name?
$ ./name Dennis Ritchie
Hello, Dennis Ritchie.

gcc -o name name.c がコマンドライン (コマンド行) です。
gcc がコマンド、-o と name と name.c が引数です。
このコマンドライン引数をプログラム内で利用するために
main関数には、argc や argv という引数を付けることができます。
コマンドライン引数が必要ないときは void で構いません。
argc や argv はそういう名前を使わなければならないという
ことではありません。なんでもいいんです。
int main(int c, char *v[]) と書いても構いません。
argument count と argument vector という意味です。

質問を放置しないでほしい。

Name: みけCAT
[URL]
伝説なるハッカー(690,560 ポイント)
Date: 2018年1月13日(土) 19:45
No: 4
(ONLINE)

 Re: コマンドライン引数がよくわらかない

かずま さんが書きました:
gumi さんが書きました:市販のテキストを読んだところ
コマンドライン引数は
int main(void)と
main(int argc, char *argv[])
の二種類書き方があると知りました。

質問に誤りがあります。

main関数の引数は
int main(void) と
int main(int argc, char *argv[])

のはずです。

具体的なテキスト名が無いのでわかりませんが、質問ではなく「市販のテキスト」に誤りがある可能性が考えられます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[11人]