如何使用 C 宏替换被调用函数?

How to replace callee function using C macro?

我在使用 C 宏时遇到问题,想知道是否有人可以提供帮助。

我正在尝试使用 C 宏替换被调用函数或删除函数调用的括号。被调用函数以函数调用的形式传递给宏

我想将代码转换成这样:

SOME_MACRO(any_function1(param0, param1))  ->  myfunc(param0, param1)
SOME_MACRO(any_function2(param0, param1, param2))  ->  myfunc(param0, param1, param2)

可以吗?

如有任何帮助,我们将不胜感激。

您不能编写像 SOME_MACRO(any_function(param0, param1)) 这样的宏,因为内容将被视为一个单独的预处理器标记,您将无法获取其中的 any_function 部分。

而是简单地做 #define any_function other_function.


更高级的主题:如果您需要更改参数或添加类型安全等,请创建一个“包装器宏”。以这个人造宏为例:

#define any_function(x, y) _Generic((x), int: other_function) (x,y,z)

这个例子做了 3 件事:

  • 将对 any_function 的调用替换为 other_function
  • 对第一个参数执行比简单函数调用所需的更严格的类型安全。例如,如果您要求 x 参数 必须 int 而不是 unsigned intlongshort 或类似的,否则可以传递给以 int 作为参数的函数(将发生“左值转换”)。
  • 出于兼容性原因,将第三个参数 z 添加到调用中,调用者代码中没有。同样,我们也可以删除其中一个参数或更改它们的顺序。