【发布时间】:2020-02-03 15:17:31
【问题描述】:
我正在尝试在三元运算符中实现 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;
}
【问题讨论】:
-
你不能真正在三元表达式中有语句(不管你的编译器有什么扩展),只有表达式。那是因为作为表达式,它必须返回一个值。
-
如果只有第一个被执行,你怎么知道?如果您到达
dd,您还将执行位于ee之后的内容。 -
运算符用于计算表达式。如果你真的很努力地虐待他们,把一根手指伸进你的眼睛里,如果它受伤了,不要感到惊讶。
-
@r3mainer 我正要写那个。
-
这么简单的
if(){...}有什么问题吗?
标签: c goto conditional-operator