Метки

 
0
 
C++
ava
iff | 13.12.2016, 19:14
Можно ли в C создать массив меток, точнее указателей, для того, что-бы вместо:

    switch (x) {case 1: goto l1; case 2: goto l2; case 3: goto l3; default: error(); return;};
l1:
    ...
    return;
l2:
    ...
    return;
l3:
    ...
    return;


можно было-бы написаить:

void* L[] = {l1, l2, l3};
if (x <=3) goto L[x]; error(); return;
l1:
    ...
    return;
l2:
    ...
    return;
l3:
    ...
    return;
Kommentare (3)
ava
iff | 13.12.2016, 19:56 #
Компилятор GCC должен сам это оптимизировать, или для него можно реализовать переход по таблице самостоятельно: http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
А вот как это сделать в VS...
ava
Ivan. | 14.12.2016, 06:51 #
https://m.habrahabr.ru/post/315676/
Метки как значения
ava
xvr | 14.12.2016, 17:48 #
Цитата (iff @  13.12.2016,  19:56 findReferencedText)
А вот как это сделать в VS... 

Никак. Взятие адреса метки (и переход на нее) - это расширения GCC, никто другой их не поддерживает (VS точно не поддерживает)
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  iff   xvr   Ivan.
Ähnliche
advanced
Absenden