2013-07-07 1 views
1

Мой код выглядит следующим образом: (п представляет собой число среди 0,1,2 и 3, и loc_A/B/C/D, каждый представляет собой блок кода)прыжок таблица указателей и код

int test(int n){ 
    static void *jt[7]= {&&loc_A, &&loc_B, &&loc_C, &&loc_D}; 
    goto *jt[n]; 
    loc_A: 
    ...... 
    loc_B: 
    ...... 
    loc_C: 
    ...... 
    loc_D: 
    ...... 
} 

Что означает «& & loc_A» означает? Является ли это адресом (или местоположением) кодов, которые представляет loc_A?

+0

Почему вы хотите использовать прыжок, вы можете сделать это без прыжка. (Что лучше) Я должен добавить, что это может помочь вам http://stackoverflow.com/questions/15702297/dynamic-jump-to-label-in -c – ncm

+1

Вы можете сделать то же самое с помощью оператора switch. –

+0

@immiso: спасибо, но на самом деле я изучал представление сборки инструкции switch ... и исходные коды c переводились в расширенную форму C выше, чтобы проиллюстрировать «таблицу перехода». – Allen

ответ

1

Да, но это не стандарт C. Вместо этого это GNU language extension. Поэтому лучше всего избегать.

+0

Спасибо. Этот «&&» имеет какое-либо отношение к «&» в C? Как указатель указателя или что-то в этом роде? Или создается только для размещения кода. – Allen

+0

@ Allen: Я думаю, что ребятам из GNU нужно было выбрать символ, поэтому они выбрали один из них, намек на идею «адреса». –

+0

Тогда я понял. Но это действительно может сбить с толку ... Спасибо! – Allen