0

コードブロックを以下に示します

/*************** Micro getopt() *********************************************/
#define OPTION(c,v) (_O&2&&**v?*(*v)++:!c||_O&4?0:(!(_O&1)&& \
                (--c,++v),_O=4,c&&**v=='-'&&v[0][1]?*++*v=='-'\
                &&!v[0][1]?(--c,++v,0):(_O=2,*(*v)++):0))
#define OPTARG(c,v) (_O&2?**v||(++v,--c)?(_O=1,--c,*v++): \
                (_O=4,(char*)0):(char*)0)
#define OPTONLYARG(c,v) (_O&2&&**v?(_O=1,--c,*v++):(char*)0)
#define ARG(c,v)    (c?(--c,*v++):(char*)0)

static int _O = 0;      /* Internal state */
/*************** Micro getopt() *********************************************/

このマクロがメイン関数の引数を取得するために使用されることは知っていますが、完全には理解していません。問題は、このブロックの _O の意味と、それがどのように機能するかです。

4

1 に答える 1

0

コメントが言うように、マクロがどこにいて何をしているのかを記憶するためにマクロが使用する内部状態です。コードを再実装する場合を除き、心配する必要はありません。その場合、そのコメントと一般的なコーディング スタイル以外のドキュメントが完全に欠如しているため、問題がある可能性があります。

静的であるため、そのファイルからのみアクセスでき(そのコードがヘッダーからのものである場合は神が助けてくれます)、実行中のプログラムと同じ寿命があります。

ただし、基本的に、コード内で _O に触れるべきではありません。

于 2013-07-02T07:25:43.340 に答える