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

ternary operator and goto in c, executing both

我正在尝试在三元运算符中实现 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 语句表达式扩展的严重滥用。不要使用该代码。

三元运算符returns一个值。它不执行语句。因此你的 goto 没有被执行。