SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

C言語を使ったコンソールアプリケーションの作成
コマンドラインオプションの解析方法

PC-UNIX系の環境と同様に、Windows上にもgetopt関数を実装可能

Windows環境でオプションを解析する

 getoptは、主としてUNIX系のOSで使われるオプション解析のための機能です。従って、世にあるgetoptを利用したプログラムの多くは、PC-UNIX系OSの上でビルドすることを前提に書かれています。しかし、Windows上でもgetoptが使えたら大変便利ですし、プログラムの移植性向上にも一役買ってくれそうです。

 なんとか、Windows上でgetoptを使う手立てはないものでしょうか? 実は、いくつか解決策が存在します。本稿では、いくつかある方法の中でも

  • BSDライセンスで配布されているgetoptを利用する方法
  • GNU getoptのWindows向け実装を利用する方法

の2つを取り上げ、Windows上でgetoptを利用する方法について紹介します(※注3)。なお、本文中に掲載したプログラムの動作確認には、Free Getoptを使用しました。

 このほか、パブリックドメインで提供されているgetoptを使う方法などがあります。

BSDライセンスで配布されているgetoptを利用する方法

 Free GetoptというBSDライセンスで提供されているgetoptを利用することでもWindows上でgetoptを活用することができます。

 このライブラリの目標は、GNU getopt互換のBSDライセンスで提供されるgetoptを作り出すことです(さらに、Windowsで使われる「/」を使ったオプションの指定にも対応したいとのことです)。

 柔軟なBSDライセンスで提供されているライブラリであるため、様々な用途に使えるのが強みです。長らく更新が止まっていることがネックですが、BSDライセンスで提供されている貴重なライブラリとして大変有用です。

GNU getoptのWindows向け実装を利用する方法

 Linuxやその他のフリーなPC-UNIX系OSで標準的に使われているGNU getoptをWindows向けにポーティングしたタイプのライブラリです。代表的なものに下記ウェブサイトで配布されているようなものが挙げられます。

 唯一問題となるのは、GPLによるソースコード開示義務でしょう。この問題さえクリアできれば、使いやすいライブラリだと言えます。

 いずれもincludeするべきヘッダーファイルがunistd.hではないので、その点に注意して必要なファイルと共にコンパイルすれば、getoptを利用したプログラムをWindows環境でビルドし、実行することが可能です。

まとめ

 今回ここで紹介した伝統的なgetopt関数以外にも、長いオプションを解析するためのGNUによる拡張としてgetopt_longgetopt_long_onlyがあります。

 これら2つの関数については、マニュアルページに詳細なサンプルコードが掲載されており、参考資料に挙げたGNUのサイトでもよく解説されているので、そちらを参照しながらプログラムを組むと良いでしょう。その時にも、本稿で紹介したgetoptの知識を生かしていただければ幸いです。

参考資料

本稿を執筆するにあたって、下記の資料を参考にしました。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

太田 晃(オオタ アキラ)

 ブログ(http://repse.blogspot.com/)では、coLinux上にMinGWを用いてクロスコンパイル環境を構築し、そのうえでSDLやOpenGLを使ってWindows向けのプログラムを書くとか、海外のソフトウェアを(勝手に)日本語化するとか、Windowsのインデックスサービ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4086 2009/07/23 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー