コマンドライン引数

もはやマイコンからも離れた記事を書いてみるテスト。

ライブラリにやらせてしまえ

コマンドライン引数ありますよね。端末からプログラムを実行するときにつけるヤツ。ls -laとか、sleep 10とか。当然ながらC/C++では

int main(int argc, char** argv)

と書くだけで引数を簡単に取得できるわけですが、これをそこらのソフトのようにオプションを使えるようにして、オプションにも引数を付けて、と考え始めると途端に実装が面倒になります。

そこで何かライブラリがないかと探していたところ、C++ではboostにprogram_optionsというそのものズバリなものがありました。基本的にadd_options()を使ってオプション名と引数の型を指定するだけで、引数処理をしてくれます。

また、C言語ではgetoptというものがあるようです。

実行例

ヘルプ表示がお手軽なのが特に素晴らしいと思います。

$ ./program_options -h
Allowed options:
  --int arg             intオプション
  --char arg (=a)       charオプション
  --string arg          stringオプション
  --vector arg          vectorオプション
  -h [ --help ]         show help

この使い方以外にも、設定ファイルからの読み取り結果と組み合わせたり、cpコマンドのような順序が重要だったりオプション文字列の無い引数を扱うこともできます。詳しくはboostのドキュメントを参照するなりググるなりしてください。

サンプルコード

https://gist.github.com/1893249

コンパイル

コンパイル時(、というかリンク時?)に、-lboost_program_optionsを指定してやります。環境毎の手順は適当に調べてください。