C宏语法错误(C18编译器)

时间:2013-05-31 16:32:02

标签: syntax macros pic 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)

谢谢。


没关系,我找到了答案。问题是我正在使用另一个宏作为&#34;输入参数&#34;当&#34;呼叫&#34;宏。由于它是一个宏,它只是一个替换,因此不会创建内部/临时变量。

所以,我通过这样做来修复它:

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

谢谢大家! :)

P.S。:我试图回答这个问题来关闭它,但是在发布8小时之前我无法做到这一点。 所以,我只是把答案放在这里。

1 个答案:

答案 0 :(得分:0)

没关系,我找到了答案。问题是我正在使用另一个宏作为&#34;输入参数&#34;当&#34;呼叫&#34;宏。由于它是一个宏,它只是一个替换,因此不会创建内部/临时变量。

所以,我通过这样做来修复它:

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

谢谢大家! :)