2012-11-14 2 views
4

나는 달빅 VM 코드를 학습하지만, 파일 InterpC-portable.cpp에서 매크로는 이상한 C에 의해 정의 중단하고있다. 그들은 나를 위해 이해하기가 어렵다. 코드는 다음과 같습니다 매크로 정의 방법을 이해하는 방법?

# define H(_op)    &&op_##_op 

및 libdex/DexOpcodes.h 파일

, 그것은 다음과 같이 사용됩니다

#define DEFINE_GOTO_TABLE(_name) \ 
    static const void* _name[kNumPackedOpcodes] = {      \ 
    /* BEGIN(libdex-goto-table); GENERATED AUTOMATICALLY BY opcode-gen */ \ 
    H(OP_NOP),               \ 
    H(OP_MOVE),               \ 
    H(OP_MOVE_FROM16),             \ 
    ... 

OP_NOP는 OP_MOVE, OP_MOVE_FROM16 일부 열거 변수입니다. 그러나 H (_op) 매크로에서 & & 연산의 의미는 무엇입니까? 메모리에 저장하지 않는 포인터 포인터를 얻는 것은 이치에 맞지 않습니다. 누구든지 나를 도울 수 있습니까? 감사.

+0

는 묻는 메시지가 정확히 무엇을, 그러나 당신이 사용하는 경우 '당신은 사전 처리 후 컴파일을 중지하고'#의 define' 평가 방식을 볼 수 있습니다'-E' 플래그를 사용하여 GCC' 컴파일 할 수 있습니다. –

답변

7

&&레이블 값 연산자입니다. 피연산자로 사용되는 현재 범위에서 정의 된 레이블의 주소를 반환합니다. 확장자는 gcc입니다.

+0

+1 여기에 링크 : http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html –

+0

감사합니다. 지금은 의미가 있습니다. –

+0

내가 얻지 못하는 것은 밑줄입니다. 대신 매크로가'&& _ op ## _ op'이 될까요? 'H (foo)'를 어떻게 평가할 것인가? –

관련 문제