Cで書かれたプログラムにヘルプ/利用情報を書いたり表示したりする便利な練習ですか?

私はコンソールに似たC言語のプログラムを書いています。そのため、ユーザーは実行するコマンドを指定することができます(これも私が定義しています)。ちょうど以下のように:

>cmd1 arg
(result blah blah blah)
>

私は次のような使用情報を表示したい:

>help
Usage: cmd1 arg1 [arg2]
       cmd2 arg1 [arg2]
       cmd3 arg1 [arg2]
       ....

しかし、私は "Usage:cmd1 arg1 [arg2] \ n \ t" ... のような文字列やマクロを定義するのが面倒だと思います。 そうするベストプラクティスはありますか?

2
この宿題ですか?
追加された 著者 Andrew Marshall,
問題はありません。このようなシェルを作ることは、非常に典型的なCS割り当てにすぎません。
追加された 著者 Andrew Marshall,
@AndrewMarshallまあ、私は追加することを忘れないでください。 THX
追加された 著者 onemach,

2 答え

標準的な習慣は、特定の条件が満たされたとき(プログラムに引数が渡されなかったときなど)に呼び出すことができる usage 関数を作ることです。

void usage(void) {
    printf("Usage: cmd1 arg1 [arg2]\n"
           "       cmd2 arg1 [arg2]\n"
           "       cmd3 arg1 [arg2]\n"
           ...
           "       cmdn arg1 [arg2]\n");//if the string is too long you'll have
                                        //to break it up into multiple printfs
}

int main(int argc, char** argv) {
    if (argc < 2) {
        usage(); 
        return 0;
    }

   //main program....
}
2
追加された
私は正確な制限を覚えていませんが、適合するC実装では少なくとも 4096文字の文字列を許可する必要があります。コンパイラの中にはもっと多くのものを許すものもあれば、4096が安全な制限(またはCの標準で定義されているもの)である。
追加された 著者 dreamlax,
@AndrewMarshall:おそらく私は間違っていますが、5.2.4.1を参照してください: "文字列リテラルまたはワイド文字列リテラル(連結後の4095文字)
追加された 著者 dreamlax,
@AndrewMarshall良いアイデアは、ここできれいになります。
追加された 著者 Seth Carnegie,
二重引用符で囲まれた文字列を空白だけで区切って並べることで、Cで文字列を連結することも可能です。このような非常に長い文字列には便利です。
追加された 著者 Andrew Marshall,
@dreamlax C99のスペックをよく読んでいて、これに関しては何も見つかりませんでした。正直言ってそれは文字列なので何らかの制限があるのは奇妙に思えますが、それは4096個の個別の char を格納する能力と大きく異なるはずはありません(4096は \ 0 )。
追加された 著者 Andrew Marshall,
@dreamlaxもちろん、私はそのページのを見ていましたが、その1つではありません。それを指摘してくれてありがとう!私は、それが4095プラスヌル文字だと仮定します。
追加された 著者 Andrew Marshall,

gnu argpライブラリを使用できるシステムでプログラミングしている場合あなたは、それを調べることがうまくいくでしょう。引数の処理が簡単になり、ヘルプ/使用法のメッセージとオプションが作成されます。

0
追加された