c中的三元运算符和goto,都执行

问题描述 投票:0回答:2

我正在尝试在三元运算符中实现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;
}
c goto conditional-operator
2个回答
7
投票

goto dd;之后,程序控制跳到dd标签,在那里执行语句,并继续到ee标签之后的语句。要使控件不从dd标签之后的语句流到ee标签之后的语句,必须插入return语句或其他跳转语句。

({goto dd;})是对GCC语句表达式扩展的严重滥用。不要使用该代码。


-1
投票

三元运算符返回一个值。它不执行该语句。因此,您的goto不会被执行。

© www.soinside.com 2019 - 2024. All rights reserved.