Что такое косвенное утверждение goto? - PullRequest
12 голосов
/ 26 мая 2019

В Clang API есть GotoStmt и IndirectGotoStmt.Существует очень мало объяснений различий между этими двумя типами Goto.Я знаю, что такое goto label; утверждение.Но что такое косвенное утверждение goto ?Я хочу знать, что это такое в контексте кода C / C ++, а не только Clang.Что значит синтаксически иметь косвенный оператор goto ?Можете ли вы привести пример кода?

Редактировать: интересен следующий вопрос.

Можете ли вы сделать вычисленное goto в C ++

1 Ответ

8 голосов
/ 26 мая 2019

Существует расширение GNU, которое позволяет взять адрес метки, сохранить ее для последующего использования, а затем goto этот адрес на более позднем этапе. Подробнее см. https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html. Пример:

    void *ptr;

    if(...)
        ptr = &&foo;
    else
        ptr = &&bar;

    /* ... */
    goto *ptr;

foo:
    /* ... */

bar:
    /* ... */

Clang также поддерживает это, поскольку стремится быть совместимым с GCC.

Использование вышеперечисленного может быть, например, при реализации конечных автоматов.

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