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