c中的三元运算符和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不

我试图在三元运算符中实现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;
}