Как и другие заявляют, это расширение GNU C (https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html).
В дополнение к вышеперечисленному использованию есть обход в системе возврата и ручная обработка эпилога функции (ей).
Несмотря на то, что варианты использования этого немногочисленны, это было бы полезно при написании полностью исключительного ABI на основе C. Исключительный ABI, который я написал для очень унаследованной платформы, использует их для выполнения Longjump без буфера. (Да, я восстановил кадр стека перед раздачей, и я уверен, что переход безопасен).
Кроме того, его можно использовать для блока finally «JSR», как в Java до Java 7, где до возврата сохраняется явная метка возврата, а затем выполняется блок finally. То же самое до того, как какое-либо исключение будет сгенерировано или переброшено (документация ничего не говорит о том, что оно недействительно в GNU C ++, но я, вероятно, вообще не буду использовать его в C ++).
Как правило, синтаксис не должен использоваться. Если вам нужны локальные переходы, используйте явные переходы или фактические блоки управления, если вам нужны нелокальные переходы, используйте longjmp, если необходимо, и исключения в C ++, где это возможно