История изменений
Исправление SZT, (текущая версия) :
Настоящая крутость goto проявляется при использовании gcc-шного расширения, которое позволяет брать указатели с этих меток и переходить по ним https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html . Это еще поддерживается clang-ом и ICC for linux
Этот прием используется в реализации парсера для строк в vfprintf от glibc https://github.com/bminor/glibc/blob/master/stdio-common/vfprintf.c
Правда компилятор падает если использовать особо наркоманские конструкции с этими метками для инициализации массива:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66178 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66123
Но никто в здравом уме писать такой код для чего-нибудь, кроме «посмотреть, скомпилирует ли такую хрень компилятор» не будет, так что эти баги не мешают нормальным применениям подобного расширения.
Исходная версия SZT, :
Настоящая крутость goto проявляется при использовании gcc-шного расширения, которое позволяет брать указатели с этих меток и переходить по ним https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html . Это еще поддерживается clang-ом и ICC for linux
Этот прием используется в реализации парсера для строк в vfprintf от glibc https://github.com/bminor/glibc/blob/master/stdio-common/vfprintf.c
Правда компилятор падает если использовать особо наркоманские конструкции с этими метками для инициализации массива:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66178 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66123
Но никто в здравом уме писать такой код для чего-нибудь, кроме «посмотреть, скомпилирует ли такую хрень компилятор» не будет, так что эти баги не мешают нормальным применениям подобного разширения.