2013-07-07 1 views
1

내 코드는 다음과 같다 : (n은 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

@imsiso : 감사합니다.하지만 실제로 switch 문을 어셈블리로 표현하는 방법을 배우고있었습니다. 원래의 C 코드는 "점프 테이블"을 설명하기 위해 위의 확장 된 C 형식으로 변환되었습니다. – Allen

답변

1

예, 표준 C가 아닙니다. 대신 GNU language extension입니다. 그러므로 피하는 것이 가장 좋습니다.

+0

감사합니다. 이 "&&"는 C에서 "&"와 관련이 있습니까? 포인터 나 그와 비슷한 포인터? 또는 코드 위치를 나타 내기 위해 생성됩니다. – Allen

+0

@Allen : GNU 남자들은 심볼을 선택해야했기 때문에 "주소"라는 아이디어에 대해 암시를했다. –

+0

나는 그것을 얻었다. 그러나 이것은 정말로 혼란 스러울 수 있습니다 ... 감사합니다 !!! – Allen