LINUX.ORG.RU

История изменений

Исправление 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

Но никто в здравом уме писать такой код для чего-нибудь, кроме «посмотреть, скомпилирует ли такую хрень компилятор» не будет, так что эти баги не мешают нормальным применениям подобного разширения.