带函数参数的宏调用函数

时间:2018-05-02 13:37:51

标签: c macros

我需要一个宏,它只调用作为参数传递给该宏的函数。该函数是void类型,没有参数。

例如,如果我有以下功能:

void function(void) {
//doSomething
}

我需要一个使用 function 参数调用的APPLY_FUNCTION宏,只需调用该函数:

APPLY_FUNCTION(function);

我试图将宏定义为:

#define APPLY_FUNCTION(function)    (function)

但它不起作用,当我尝试调用宏时,我得到一个没有效果的"语句"错误。

问题是我应该如何定义该宏?

2 个答案:

答案 0 :(得分:1)

你可能想要这个:

#include <stdio.h>

#define APPLY_FUNCTION(functionname) functionname()

void function(void) {
  printf("Function called\n");
}

int main()
{
  APPLY_FUNCTION(function);
}

输出:

Function called

根据您的定义:

#define APPLY_FUNCTION(function)   (function)

预处理器生成以下行:

(function);

这在语法上是正确的,但它不会调用函数,因此会发出警告。

BTW:你应该调用宏而不是CALL_FUNCTION。你没有应用一个功能,你调用它。

答案 1 :(得分:0)

快速&amp;脏版只是这个:

#define APPLY_FUNCTION(function) (function)()

其中()表示这是一个函数调用。

但我更愿意使用类型安全的C11版本:

#define APPLY_FUNCTION(function) _Generic((function), void (*)(void): (function)())

这可以防止用户将错误的函数传递给宏。