Что делает этот макрос?

Я делаю проект и использую проекты прошлых лет, чтобы помочь мне получить идеи о том, как делать определенные вещи. Обратите внимание, что я не копирую бездумно, но есть много вещей, которых нет в книге.
Во всяком случае, вот макрос, который я не понимаю:

#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, которую я позже могу установить в качестве функции прерывания для определенного прерывания, или что происходит, когда появляется это прерывание.

Новая функция прерывания вызывает signalAll () определенного объекта из массива объектов в зависимости от numIVT. Затем он проверяет, должна ли она вызывать старую функцию прерывания, и вызывает ее или нет.

Это конец новой функции прерывания.

Но что делает строка перед #endif? Я искал весь проект и не могу найти ответ. Прежде чем посмотреть на этот проект во время мозгового штурма, я подумал о чем-то похожем на это, но без последней строчки.

Если бы кто-то мог сказать мне, прав ли я или нет в отношении деталей, я думаю, что меня отвлекли, и если бы кто-то мог сказать мне, что делает эта таинственная линия, это было бы очень признательно.

3

Решение

Давайте предположим, numIVT=1, Эта последняя часть макроса будет расширена до:

IVTEntry entry1(1, int1);

Это означает, что вы определяете объект типа IVTEntryи используя 1 а также int1(функция, объявленная в том же макросе) в качестве аргументов конструктора.

6

Другие решения

Последняя строка объявляет объект типа IVTEntry с именем entry ** и инициализирует его числом и только что определенной функцией.

1

По вопросам рекламы [email protected]