CmdOpt は, コマンドラインオプションを解釈するためのライブラリです.
こんなものを使わずに,おとなしく getopt を使いましょう.
cmdopt.h からの抜粋になりますが, 以下のような構造体を提供します.
// 長いオプション typedef struct LongOpt { const char *name; // オプションの名前(NULL ならば終端と判断する) int has_arg; // オプションが引数を受け取るかどうか // 引数なし(0),引数あり(1),どちらでも可 (2) int *flag; // NULL でなければ *flag を val で上書き int val; // このオプションが見つかったときに返す値 } LongOpt, *hLongOpt;
// Command line option. typedef struct CmdOpt { // コマンドライン引数 int argc; char **argv; // コマンドラインオプションを解釈するための設定 const LongOpt *longopts; // 長いオプション const char *optstring; // 短いオプション // Status. int optind; // 次に解釈するオプションのインデックス char *nextchar; // 次に解釈する文字 char *optarg; // オプションの引数 int optopt; // オプション文字 char *optlong; // 一致した長いオプション int opterr; // 警告レベル // なし(0),エラー出力(1),すべて出力(2) int longindex; // 一致した長いオプションのインデックス int optnum; // オプションの数 } CmdOpt, *hCmdOpt;
getopt と似たような 動作が得られるように作成してあり, 構造体のメンバの多くは getopt で使用されている同名の変数と同様の意味を持ちます. 完全に同じではないところが紛らわしいです. 実際のところ,getopt の実装はまったく調べていません.
cmdopt.h からの抜粋になりますが, 以下のような関数を提供します.
// コマンドラインオプションを前方から一つずつ解釈 int CmdOpt_Get( hCmdOpt h );
一致したオプション文字もしくは長いオプションの返り値を返します. すべての引数を解釈し終われば -1 を返します. 不明なオプション文字や長いオプションを見つけた場合は `?' を返し, 引数の過不足がある場合は `:' を返します.
// コマンドラインオプションを解釈するための初期化 void CmdOpt_Init( hCmdOpt h, int argc, char **argv, const char *optstring, const LongOpt *longopts );
解釈の準備をするための関数です. argc と argv には main の引数をそのまま渡します. optstring には オプションと解釈する文字を渡します. オプション文字の後ろに `:'(コロン)をつけると, そのオプションは引数を受け取るようになります. "::" をつけると, そのオプションは引数を受け取っても受け取らなくてもよくなります.
longopts には 受け取る長いオプションの配列を渡します. 必要がなければ NULL を渡すか, 最初の要素の name を NULL にしておきます.
sample.c を参考にしてください.
何の予定もありません.
getopt のマニュアルを参考にしました.