【发布时间】:2020-10-18 10:57:10
【问题描述】:
我相信我的问题的答案与C Preprocessor, Stringify the result of a macro 有关。但是,我无法将解决方案应用于我的用例。
我有这个功能:
astNodePtr createNode(int lineno, int nodeType, ...);
我有一个与之配套的宏:
#define NODE(nodeType, ...) createNode(yylineno,nodeType,##__VA_ARGS__)
一切正常,直到我遇到这样的一行:
NODE(1,x,NODE(2,y,z))
我的链接器给了我一个错误:undefined reference to 'NODE'
编辑:
我尝试过(受上述链接启发)
#define EXPAND(x) ##x
#define NODE(nodeType, ...) createNode(yylineno,nodeType, EXPAND(__VA_ARGS__))
但是,我遇到了同样的错误。
编辑:
我应该提到我也使用宏:NODE(5)
因此,我需要在__VA_ARGS__ 前面加上## 以避免尾随逗号问题。
【问题讨论】:
-
你希望展开的结果是什么?
-
createNode(yylineno,1,x,createNode(yylineno,2,y,z))
标签: c gcc c-preprocessor