2013-01-23 4 views
3

나는 프로젝트를하고 있으며 지난 몇 년 동안 프로젝트를 사용하여 특정 일을하는 방법에 대한 아이디어를 얻도록 돕습니다. 나는 아무렇게나 카피하지는 않지만 책에는없는 많은 것들이 있음을 주목하라.이 매크로는 어떤 기능을합니까?

#define PREPAREENTRY(numIVT,oldINT) \ 
    void interrupt int##numIVT(...){\ 
      IVTEntry::entries[##numIVT]->signalAll();\ 
      if (oldINT) IVTEntry::entries[##numIVT]->callOld();}\ 
    IVTEntry entry##numIVT(##numIVT,int##numIVT); 
#endif 

나는 완전히 잘 모르겠지만, 나는 그것의 대부분의 요령을 찾은 것 같아 : 은 어쨌든 여기에 내가 이해하지 못하는 매크로입니다. 따라서 PREPAREENTRY는 numIVT (IV 테이블의 번호)와 OldNT (이전 인터럽트)의 두 값을 얻습니다.

그런 다음 이름이 숫자 numIVT 인 인터럽트 함수를 만듭니다.이 함수는 나중에 특정 인터럽트에 대한 인터럽트 함수로 설정하거나 해당 인터럽트가 나타날 때 발생합니다.

새로운 인터럽트 기능은 numIVT에 따라 개체 배열에서 특정 개체의 signalAll()을 호출합니다. 그런 다음 이전 인터럽트 기능을 호출해야하는지 여부를 확인하고 호출합니다.

이것이 새로운 인터럽트 기능의 끝입니다.

#endif 이전의 줄은 무엇을합니까? 나는 프로젝트 전체를 조사 해왔고 답을 찾을 수 없습니다. 브레인 스토밍을하는 동안이 프로젝트를보기 전에 나는 이것과 비슷한 것을 생각했지만 마지막 줄은 생각지 못했습니다.

누군가가 내가 옳았는지 나 틀렸는지를 말해 줄 수 있다면 내가 잠깐 깨어있어 누군가가이 신비한 라인이 무엇인지 말해 줄 수 있다면 크게 감사 하리라.

답변

6

numIVT=1으로 가정합니다. 당신이 유형 IVTEntry의 객체를 정의하고 생성자 인수로 1int1 (같은 매크로에 선언 된 기능)를 사용하는 것을 의미

IVTEntry entry1(1, int1); 

: 매크로의 마지막 부분은 확대 될 것이다.

+0

감사합니다. 나머지 코드에 대한 이해가 괜찮습니까? 최대한 빨리 답변을 수락하겠습니다. (: 3 분) [: –

+0

@InvaderZim 예, 코드에 대한 이해가 정확합니다. D – mfontanini

+0

대단히 감사합니다. 이것은 많은 것을 설명 할뿐만 아니라 퍼즐의 마지막 부분입니다. ^^ –

1

마지막 행은 항목 **이라는 IVTEntry 유형의 객체를 선언하고 방금 정의한 숫자와 함수로 초기화합니다.

관련 문제