c中的三元运算符和goto,同时执行
我试图在三元运算符中实现goto: 下面是我正在做的:c中的三元运算符和goto,同时执行,c,goto,conditional-operator,C,Goto,Conditional Operator,我试图在三元运算符中实现goto: 下面是我正在做的: (a<5 && done==0) ? ({goto dd;}) : ({goto ee;}); (a在转到dd;之后,程序控制跳转到dd标签,在那里执行语句,并继续执行ee标签后面的语句。要使控制不从dd标签后面的语句流向ee标签后面的语句,必须插入return 语句或其他跳转语句 ({goto dd;})是对GCC语句表达式扩展的严重滥用。不要使用该代码。三元运算符返回一个值。它不会执行该语句。因此,您的goto不
(a<5 && done==0) ? ({goto dd;}) : ({goto ee;});
(a在转到dd;
之后,程序控制跳转到dd
标签,在那里执行语句,并继续执行ee
标签后面的语句。要使控制不从dd
标签后面的语句流向ee
标签后面的语句,必须插入return
语句或其他跳转语句
({goto dd;})
是对GCC语句表达式扩展的严重滥用。不要使用该代码。三元运算符返回一个值。它不会执行该语句。因此,您的goto不会被执行。三元表达式中不可能有语句(无论编译器有什么扩展),仅限表达式。这是因为作为表达式,它必须返回一个值。您如何知道是否只执行了第一个值?如果您到达dd
,您还将执行ee
之后的内容。运算符用于计算表达式。如果您真的试图滥用它们并用手指戳眼睛,请不要感到惊讶f它很痛。@r3mainer我正准备写这篇文章。一个好的简单的if(){…}
有什么问题吗?gotos被执行了,其中一个gotos被执行了。允许从语句表达式跳出,但如果该语句表达式是较大表达式的一部分,则不指定该表达式的哪些其他子表达式已计算,除非语言定义要求在语句表达式之前或之后计算某些子表达式
#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;
}