троичный оператор и goto в c, выполняя оба - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь реализовать goto в троичном операторе:

Итак, вот что я делаю:

(a<5 && done==0) ? ({goto dd;}) : ({goto ee;});

С этими скобками я пытаюсь преобразовать выражение в выражение .

Проблема в том, что обе метки выполняются. Почему?

Вот код ( Идеальная ссылка ):

#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;
}

Ответы [ 2 ]

7 голосов
/ 03 февраля 2020

После goto dd; управление программой переходит к метке dd, выполняет там инструкции и переходит к инструкциям после метки ee. Чтобы контроль не передавался из операторов после метки dd в операторы после метки ee, необходимо вставить оператор return или другой оператор перехода.

({goto dd;}) - ужасное злоупотребление расширения выражения G CC. Не используйте этот код.

0 голосов
/ 03 февраля 2020

Тернарный оператор возвращает значение. Это не выполняет заявление. Следовательно, ваши действия не исполняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...