Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当for循环在C中抽象为宏时,无限循环_C_Loops_Macros_Infinite - Fatal编程技术网

当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语言的程序员的一种疾病。早日康复。这是宏观滥用的经典例子。不可读、不可信、毫无意义。