我有一个从Windows移植到Linux的库,需要做最少的修改。
库中有一些函数调用,我需要调用的变量少了一个参数,我正试图使用宏来执行替换。
问题是这些调用传递的是结构的地址,我得到的错误是“error:”&“may not appear in macro parameter list”
例如,如果库具有以下调用:
foo(param1, ¶m2);
我需要换成
foo_variant(¶m2);
我将在文件顶部添加一个条件编译,如下所示:
#if defined LINUX_VARIANT
#define foo(param1, ¶m2) foo_variant(¶m2)
#endif
有没有办法“逃逸”与号来避免这个错误?
如果没有,我确实看到另一篇文章提到可以定义指向结构的指针,并使用指针而不是获取结构的地址,但是我希望避免这样做,除非没有其他选项。
感谢前方的启示!
最佳答案
只需转发整个参数表达式:
#define foo(param1, param2) foo_variant(param2)
请注意,由于预处理器的限制,如果任何参数包含逗号,则此宏将失败。
关于c - 有没有办法在C预处理程序宏中“转义”“&”号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37341576/