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() *********************************************/

我知道这个宏用于获取 main 函数的参数,但并不完全理解。现在的问题是这个块中的 _O 是什么意思,以及它是如何工作的。

4

1 回答 1

0

就像评论说的那样,宏用来记住它们在哪里以及它们在做什么的内部状态。除非您重新实现代码,否则您无需担心任何事情,在这种情况下,除了该注释和一般编码风格之外完全缺乏文档表明您可能会遇到问题。

由于它是静态的,因此只能从该文件访问(如果该代码来自标头,上帝会帮助您)并且它的生命周期与执行程序相同。

但基本上,您不应该在代码中触摸 _O。

于 2013-07-02T07:25:43.340 回答