Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++のコマンドライン引数の使い方を徹底解説!argcとargvの基本

C言語やC++では、プログラムを実行する際にコマンドラインから値を渡すことができます。これらの値は「コマンドライン引数(command line arguments)」と呼ばれ、値をソースコード内に直接書き込む(ハードコーディングする)のではなく、外部からプログラムを制御したい場合に非常に重要な機能です。

コマンドライン引数は、main()関数の引数を使って処理します。argcは渡された引数の個数を表し、argv[]は渡された各引数へのポインタを格納するポインタ配列です。

基本的な使い方

以下は、コマンドラインから引数が渡されているかどうかをチェックし、その結果に応じて処理を分岐させるシンプルな例です。

#include <stdio.h>

int main( int argc, char *argv[] ) {
   if( argc == 2 ) {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 ) {
      printf("Too many arguments supplied.\n");
   }
   else {
      printf("One argument expected.\n");
   }
}

実行結果(引数が1つの場合)

$./a.out testing
The argument supplied is testing

実行結果(引数が複数の場合)

$./a.out testing1 testing2
Too many arguments supplied.

実行結果(引数なしの場合)

$./a.out
One argument expected

argcとargvのポイント

ここで押さえておきたい重要なポイントがあります。

  • argv[0]にはプログラム名そのものが格納されます。
  • argv[1]は1番目のコマンドライン引数へのポインタです。
  • *argv[n]が最後の引数となります。
  • 引数が渡されない場合でもargcは1になります(argv[0]のプログラム名がカウントされるため)。引数を1つ渡すとargcは2に設定されます。

スペースを含む引数を渡す方法

コマンドライン引数は通常、スペースで区切って渡します。しかし、引数自体にスペースが含まれる場合は、ダブルクォート "" またはシングルクォート '' で囲むことで、1つの引数として渡すことができます。

次の例では、プログラム名も出力しつつ、ダブルクォートで囲んだ引数を渡しています。

#include <stdio.h>

int main( int argc, char *argv[] ) {
   printf("Program name %s\n", argv[0]);

   if( argc == 2 ) {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 ) {
      printf("Too many arguments supplied.\n");
   }
   else {
      printf("One argument expected.\n");
   }
}

実行結果

$./a.out "testing1 testing2"
Program name ./a.out
The argument supplied is testing1 testing2

このように、クォートで囲むことで「testing1 testing2」というスペースを含む文字列が、1つの引数として正しくargv[1]に渡されていることが確認できます。

まとめ

コマンドライン引数を使いこなすことで、実行時に柔軟にパラメータを変更できるプログラムを作成できます。特にファイルパスや設定値などを外部から指定したい場合に役立つため、argcargv[]の仕組みはC/C++プログラミングの基本として必ず理解しておきましょう。

  1. C/C++のsystem()関数とは?使い方と実行例を徹底解説

    この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。 system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。 この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。 構文 system()関数の構文は以下の通りです。 int

  2. C/C++における引数の型強制(Argument Coercion)とは?仕組みとサンプルコードで解説

    本記事では、C言語およびC++における「引数の型強制(Argument Coercion)」について解説します。引数の型強制とは、関数に渡された引数の型を、コンパイラがある型から別の型へ自動的に(暗黙的に)変換する仕組みのことです。この変換は「引数の昇格ルール(argument promotion rule)」に従って行われます。つまり、より小さいデータ型の引数は、より大きいデータ型へと変換されますが、その逆の変換は行われません。なぜなら、大きなデータ型から小さなデータ型へ変換すると、データの一部が失われる(桁あふれや精度の低下が発生する)恐れがあるためです。暗黙的な型変換がどのように行われる