C中for循环被抽象为Macro时的无限循环

Infinite loop when for loop is abstracted as Macro in C

我正在摸不着头脑,我想知道为什么它会进入无限循环。感谢帮助。对于一个循环,它工作正常,但对于嵌套循环,它会进入无限循环。任何人都可以澄清这里的问题是什么吗?

typedef enum nh_type{
IPNH,
LSPNH,
NH_MAX
} nh_type_t;

#define ITERATE_NH_TYPE_BEGIN(_nh)     \
    for(_nh = IPNH; _nh < NH_MAX; nh++)

#define ITERATE_NH_TYPE_END


int main(void)
{
nh_type_t nh, nh1;
ITERATE_NH_TYPE_BEGIN(nh){
    ITERATE_NH_TYPE_BEGIN(nh1){
            printf("nh = %s, nh1 = %s\n",
            nh == IPNH ? "IPNH" : "LSPNH",
            nh1 == IPNH ? "IPNH" : "LSPNH");
    }ITERATE_NH_TYPE_END
} ITERATE_NH_TYPE_END
return 0;
}

输出

vm@vm:~$ ./a.out
nh = IPNH, nh1 = IPNH
nh = LSPNH, nh1 = IPNH
nh = LSPNH, nh1 = IPNH
nh = LSPNH, nh1 = IPNH
nh = LSPNH, nh1 = IPNH
nh = LSPNH, nh1 = IPNH
nh = LSPNH, nh1 = IPNH .... infinite loop

注意你的#define 宏:

#define ITERATE_NH_TYPE_BEGIN(_nh) \
for(_nh = IPNH; _nh < NH_MAX; nh++)

应该是:

#define ITERATE_NH_TYPE_BEGIN(_nh) \
for(_nh = IPNH; _nh < NH_MAX; _nh++)