この記事を書くに至った理由

お久しぶりです。最近引っ越しの手続きとか入社関係の手続きとか試験勉強をしていてめっちゃ忙しかったので全然ブログを更新できていませんでした。あと書く気分になれなかった。
GitHubのアカウントを変えたのでこのブログも別のリポジトリに移しました。

さて、この記事を書くに至った理由ですが、書くことが特になかったからです。
C言語でコマンドライン引数って初歩中の初歩なのであんまり書く必要もないかなーと思いましたが、備忘録(?)みたいな感じで書いてみるのもありだなと思い書くことにしました。

コマンドライン引数とは

そもそもコマンドライン引数ってなんじゃい、って方のために軽く説明します。
C言語においてプログラムを実行したときの開始点はmain関数という関数です。

#include <stdio.h>

int main(void) {
    printf("こんにちは 世界");
    return 0;
}

多分Cに触れたことがある方なら見たことない人はいないと思います。
どんなに膨大なコードでも最後はここに集結します。

コマンドライン引数とは、プログラムを起動するときに一緒に渡す追加の情報です。 例えば say.exe みたいな実行ファイルがあったとします。

// say.exe
#include <stdio.h>

int main(int argc, char **argv) {
    if (argc < 2) {
        printf("%s: 何も付加されていません。\n", argv[0]);
        return 1;
    }
    for (int i = 1; i < argc; i++) {
        printf("%s\n", argv[i]);
    }

    return 0;
}

このファイルを実行すると、

$ say
say: 何も付加されていません。

$ say hello world
hello
world

みたいな感じで、コマンドラインで入力した値を受け取ることができます。

ルール

先ほどの例ではint argc引数の個数(プログラム名も含む)、char **argv引数の中身(文字列のポインタ)になっていますが、引数の名前に指定はないので、int countchar **value なんかでも定義することができます。(こっちのほうがわかりやすいね!)

C言語にはC++のstd::stringのような型がないため、文字列にはcharへのポインタ(配列)を使います。 char **argvchar *argv[]のように書くこともできます。(文字列の配列だから二重ポインタなんですね~)

最後に

文章を書くことが得意ではないので説明が少しわかりにくかったかもです。 最後まで見てくれてありがとうございました。 みなさんもコマンドライン引数を使ってみてください。