c中的三元运算符和goto,同时执行
ternary operator and goto in c, executing both
我正在尝试在三元运算符中实现 goto:
这就是我正在做的事情:
(a<5 && done==0) ? ({goto dd;}) : ({goto ee;});
使用这些大括号,我正在尝试将语句转换为表达式。
问题是,两个标签都在执行。为什么?
这是代码 (Ideone link):
#include<stdio.h>
int main()
{
int a=0,sum=0;
int done=0;
(a<5 && done==0) ? ({goto dd;}) : ({goto ee;});
dd:
printf("%d - %d -- %d\n",a,sum,done);
++a,sum+=a;
ee:
printf("done\n");
done=1;
return 0;
}
在goto dd;
之后,程序控制跳转到dd
标签,执行那里的语句,然后继续ee
标签后面的语句。要使控制不从dd
标签后的语句流向ee
标签后的语句,必须插入return
语句或其他跳转语句。
({goto dd;})
是对 GCC 语句表达式扩展的严重滥用。不要使用该代码。
三元运算符returns一个值。它不执行语句。因此你的 goto 没有被执行。
我正在尝试在三元运算符中实现 goto:
这就是我正在做的事情:
(a<5 && done==0) ? ({goto dd;}) : ({goto ee;});
使用这些大括号,我正在尝试将语句转换为表达式。
问题是,两个标签都在执行。为什么?
这是代码 (Ideone link):
#include<stdio.h>
int main()
{
int a=0,sum=0;
int done=0;
(a<5 && done==0) ? ({goto dd;}) : ({goto ee;});
dd:
printf("%d - %d -- %d\n",a,sum,done);
++a,sum+=a;
ee:
printf("done\n");
done=1;
return 0;
}
在goto dd;
之后,程序控制跳转到dd
标签,执行那里的语句,然后继续ee
标签后面的语句。要使控制不从dd
标签后的语句流向ee
标签后的语句,必须插入return
语句或其他跳转语句。
({goto dd;})
是对 GCC 语句表达式扩展的严重滥用。不要使用该代码。
三元运算符returns一个值。它不执行语句。因此你的 goto 没有被执行。