Знатоки Protothreads (и заодно C), нужна помощь, ибо наткнулся на
странное поведение препроцессора, выражающееся в обрушении
пресловутой машины Даффа :) Суть вот в чем: мне надо макрос PT_YIELD(pt) засунуть в свой макрос. Проблема выражается в том, что по какой-то причине более одного раза это сделать невозможно - компилятор XC8 начинает ругаться на лишние case.
Пример.
Мой макрос:
#define DOUBLE_YIELD \
dummy(); \
PT_YIELD(pt);\
dummy(); \
PT_YIELD(pt);\
dummy();
Вставлено в протопотоке:
DOUBLE_YIELD;
Соответственно, не работает.
Если в из макроса выбросить один из PT_YIELD:
#define DOUBLE_YIELD \
dummy(); \
PT_YIELD(pt);\
dummy(); \
dummy();
то компилируется без проблем.
Также проблем нет, если прямо в протопотоке написать содержимое макроса с любым количеством PT_YIELD(pt)
Создается такое ощущение, что это не особенность устройства PT, а какие-то особенности обработки препроцессора. Пока не могу сообразить.
Т.е. препроцессор видимо, разворачивает все макросы PT_YIELD внутри моего. А нельзя ли дать препроцессору указание не разворачивать, а подставлять как записано?