【问题标题】:C macro syntax error (C18 compiler)C 宏语法错误(C18 编译器)
【发布时间】:2013-05-31 16:32:02
【问题描述】:

尝试编译此宏时出现语法错误。我必须使用宏,因为 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 小时之前我无法做到。 所以,我只是把答案放在这里。

【问题讨论】:

  • 没关系,我找到了答案。问题是我在“调用”宏时使用另一个宏作为“输入参数”。由于它是一个宏,它只是一个替换,所以没有创建内部/临时变量。所以,我通过这样做来修复它: unsigned char uInde​​x, uMax = MAX_QUEUE_SIZE; INCREMENT_IDX(&uInde​​x, uMax);谢谢大家。
  • 即使您在回答自己的问题,仍然习惯于将其作为答案并接受答案。否则,它将始终显示为未解决的问题,未来的开发人员可能找不到他们需要的解决方案。
  • 您好 Tevo,抱歉拖了这么久,我只是重新登录了这么久。我只是按照您的建议将我的发现作为答案。

标签: syntax macros pic c18


【解决方案1】:

没关系,我找到了答案。问题是我在“调用”宏时使用另一个宏作为“输入参数”。由于它是一个宏,它只是一个替换,所以没有创建内部/临时变量。

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

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

谢谢大家! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 2016-02-16
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多