我有一个从Windows移植到Linux的库,需要做最少的修改。
库中有一些函数调用,我需要调用的变量少了一个参数,我正试图使用宏来执行替换。
问题是这些调用传递的是结构的地址,我得到的错误是“error:”&“may not appear in macro parameter list”
例如,如果库具有以下调用:

foo(param1, &param2);

我需要换成
foo_variant(&param2);

我将在文件顶部添加一个条件编译,如下所示:
#if defined LINUX_VARIANT
    #define  foo(param1, &param2)  foo_variant(&param2)
#endif

有没有办法“逃逸”与号来避免这个错误?
如果没有,我确实看到另一篇文章提到可以定义指向结构的指针,并使用指针而不是获取结构的地址,但是我希望避免这样做,除非没有其他选项。
感谢前方的启示!

最佳答案

只需转发整个参数表达式:

#define  foo(param1, param2)  foo_variant(param2)

请注意,由于预处理器的限制,如果任何参数包含逗号,则此宏将失败。

关于c - 有没有办法在C预处理程序宏中“转义”“&”号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37341576/

10-13 07:00