当for循环在C中抽象为宏时,无限循环
我对此挠头,我想知道为什么它是在无限循环。谢谢你的帮助。对于一个循环,它可以正常工作,但对于嵌套循环,它将进入无限循环。谁能澄清一下这里的问题是什么当for循环在C中抽象为宏时,无限循环,c,loops,macros,infinite,C,Loops,Macros,Infinite,我对此挠头,我想知道为什么它是在无限循环。谢谢你的帮助。对于一个循环,它可以正常工作,但对于嵌套循环,它将进入无限循环。谁能澄清一下这里的问题是什么 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
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;
}
注意您的#定义宏:
#define ITERATE_NH_TYPE_BEGIN(_nh) \
for(_nh = IPNH; _nh < NH_MAX; nh++)
\define ITERATE\u NH\u TYPE\u BEGIN(\u NH)\
对于(_nh=IPNH;_nh
应该是:
#define ITERATE_NH_TYPE_BEGIN(_nh) \
for(_nh = IPNH; _nh < NH_MAX; _nh++)
\define ITERATE\u NH\u TYPE\u BEGIN(\u NH)\
对于(_nh=IPNH;_nh
查看您的#定义宏:
#define ITERATE_NH_TYPE_BEGIN(_nh) \
for(_nh = IPNH; _nh < NH_MAX; nh++)
\define ITERATE\u NH\u TYPE\u BEGIN(\u NH)\
对于(_nh=IPNH;_nh
应该是:
#define ITERATE_NH_TYPE_BEGIN(_nh) \
for(_nh = IPNH; _nh < NH_MAX; _nh++)
\define ITERATE\u NH\u TYPE\u BEGIN(\u NH)\
对于(_nh=IPNH;_nh
您将\u nh
输入错误为nh
。不幸的是,像这样编写宏的冲动是许多初学C语言的程序员都会遇到的一种疾病。早日康复。这是宏观滥用的经典例子。无法阅读、无法理解且毫无意义。您将\u nh
误输入为nh
。不幸的是,像这样编写宏的冲动是许多初学C语言的程序员的一种疾病。早日康复。这是宏观滥用的经典例子。不可读、不可信、毫无意义。