Bashから実行するアプリケーションを作成する際に必須の知識となるのがコマンドライン引数の仕組みです。
本記事では、Bashから実行する例を使用して、コマンドライン引数で実行時に引数を受け取る方法と、その引数の使用方法を紹介します。
前提知識
-
シェルの基本的な使用方法を知っている -
C++の基礎構文を理解している
コマンドライン引数とは
コマンドライン引数とは、プログラムを実行するときに外部から渡せる情報のことです。
Bashからの実行開始時にファイル名を渡す オプションを指定するといった際に不可欠となります。
コード例
受け取った引数を文字列としてそのまま出力するコード例
//---------------------------------------------------------------
//! @file main.cpp
//! @brief コマンドライン引数のサンプルコード
//! @author つきの
//---------------------------------------------------------------
#include <iostream>
//---------------------------------------------------------------
//! @brief エントリポイントの関数
//! @param argc コマンドライン引数の個数
//! @param argv コマンドライン引数の配列
//! @return 0:正常終了 1:異常終了
//---------------------------------------------------------------
int main(int argc, char* argv[]) {
// コマンドライン引数を表示、0番目はアプリケーション名なので1から開始
for (int i = 0; i < argc; i++) {
// 引数を表示
std::cout << "argv[" << i << "] = " << argv[i] << std::endl;
}
// 正常終了
return 0;
}
ビルドを行い、Bashなどのシェルでこのexeがあるディレクトリに移動をして実行してみます。
本記事のアプリケーション名はCommandLineArgsTest.exeとなっておりますので、実行する際にはこの名前を使用しています。
$ CommandLineArgsTest.exe HelloWorld こんにちは、世界
argv[0] = CommandLineArgsTest.exe
argv[1] = HelloWorld
argv[2] = こんにちは、世界
コマンドラインから実行時に引数を受け取ることに成功しました。
main()のコマンドライン引数は可変長引数であり、実行時にBashへ入力した文字列が空白区切りで格納されます。
第一引数は、コマンドライン引数の個数で、慣習的にargcという名前を使用しています。
第二引数は、格納された文字列配列へのポインタとなっており、慣習的にargvという名前を使用しています。
文字列配列の0番目には、実行ファイルの名前が格納されており、それ以降には入力した文字列が格納されます。
//---------------------------------------------------------------
//! @brief エントリポイントの関数
//! @param argc コマンドライン引数の個数
//! @param argv コマンドライン引数の配列
//! @return 0:正常終了 1:異常終了
//---------------------------------------------------------------
int main(int argc, char* argv[]) {
// コマンドライン引数を表示、0番目はアプリケーション名
for (int i = 0; i < argc; i++) {
// 引数を表示
std::cout << "argv[" << i << "] = " << argv[i] << std::endl;
}
// 正常終了
return 0;
}
総括
-
コマンドライン引数を使用することで、実行時に値を受け取ることが出来る -
C++ではmain()関数の引数リストにコマンドライン引数を記述し、個数には慣習的にargc、ポインタには慣習的にargvという名前を使用する -
argv[0]には必ず実行ファイル名が入り、argv[1]以降に渡した引数が順番に格納される