我正在尝试在三元运算符中实现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语句表达式扩展的严重滥用。不要使用该代码。
三元运算符返回一个值。它不执行该语句。因此,您的goto不会被执行。