Синтаксическая ошибка макроса C (компилятор C18)

Я получил синтаксическую ошибку при попытке скомпилировать этот макрос. Я должен использовать макрос, так как C18 не поддерживает встраивание функций. Использование обычного вызова функции приведет к тому, что компилятор будет иметь гораздо большие накладные расходы ISR (обычно это около 10 ассемблерных инструкций, с вызовом функции становится 50).

Проверил, пробелов нет.

#define INCREMENT_IDX(puIdx,uMax)  uMax--;\
                                   if (*puIdx <= uMax)\
                                   {\
                                       (*puIdx)++;\
                                       if (*puIdx > uMax)\
                                       {\
                                           *puIdx = 0;\
                                       }\
                                   }\
                                   else\
                                   {\
                                       return(FALSE);\
                                   }\
                                   return(TRUE);

И компилятор выдал синтаксическую ошибку, когда я вызываю макрос:

unsigned char uIndex;

INCREMENT_IDX(&uIndex, MAX_QUEUE_SIZE)

Спасибо.


Ничего, я нашел ответ. Проблема в том, что я использую другой макрос в качестве «входного параметра» при «вызове» макроса. Поскольку это макрос, это просто замена, поэтому внутренняя/временная переменная не создается.

Итак, я исправил это, сделав это:

unsigned char uIndex, uMax = MAX_QUEUE_SIZE;
INCREMENT_IDX(&uIndex, uMax)

Спасибо вам всем! :)

P.S.: Я пытался ответить на этот вопрос, чтобы закрыть его, но не смог сделать это раньше, чем через 8 часов после публикации. Итак, я просто положил ответ здесь.


person Hary    schedule 31.05.2013    source источник
comment
Ничего, я нашел ответ. Проблема в том, что я использую другой макрос в качестве входного параметра при вызове макроса. Поскольку это макрос, это просто замена, поэтому внутренняя/временная переменная не создается. Итак, я исправил это следующим образом: unsigned char uIndex, uMax = MAX_QUEUE_SIZE; INCREMENT_IDX(&uIndex, uMax); Спасибо вам всем.   -  person Hary    schedule 31.05.2013
comment
Несмотря на то, что вы отвечаете на свой собственный вопрос, по-прежнему принято ставить его как ответ и принимать ответ. В противном случае он всегда будет отображаться как вопрос без ответа, и будущие разработчики могут не найти нужных им решений.   -  person Tevo D    schedule 06.06.2013
comment
Привет, Тево, извините, что слишком долго, я просто повторно вхожу в систему после всего этого времени. Я просто последовал вашему предложению, чтобы поставить свою находку в качестве ответа.   -  person Hary    schedule 09.08.2016


Ответы (1)


Ничего, я нашел ответ. Проблема в том, что я использую другой макрос в качестве «входного параметра» при «вызове» макроса. Поскольку это макрос, это просто замена, поэтому внутренняя/временная переменная не создается.

Итак, я исправил это, сделав это:

unsigned char uIndex, uMax = MAX_QUEUE_SIZE;
INCREMENT_IDX(&uIndex, uMax)

Спасибо вам всем! :)

person Hary    schedule 09.08.2016