C 带有调用函数的函数参数的宏

C 带有调用函数的函数参数的宏,c,macros,C,Macros,我需要一个宏,它只调用作为参数传递给该宏的函数。该函数为void类型,没有参数 例如,如果我有以下功能: void function(void) { //doSomething } APPLY_FUNCTION(function); 我需要一个宏,APPLY_函数,该函数通过函数参数调用,并简单地调用该函数: void function(void) { //doSomething } APPLY_FUNCTION(function); 我尝试定义宏,如下所示: #define APPLY

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

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

void function(void) {
//doSomething
}
APPLY_FUNCTION(function);
我需要一个宏,APPLY_函数,该函数通过函数参数调用,并简单地调用该函数:

void function(void) {
//doSomething
}
APPLY_FUNCTION(function);
我尝试定义宏,如下所示:

#define APPLY_FUNCTION(function)    (function)
但是它不起作用,当我试图调用宏时,我得到一个没有任何错误的语句


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

您可能希望这样:

#include <stdio.h>

#define APPLY_FUNCTION(functionname) functionname()

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

int main()
{
  APPLY_FUNCTION(function);
}
根据你的定义:

#define APPLY_FUNCTION(function)   (function)
预处理器生成以下行:

(function);
这在语法上是正确的,但它不调用函数,因此发出警告


顺便说一句:你应该调用宏而不是调用函数。您不应用函数,而是调用它。

快速脏版就是这样:

#define APPLY_FUNCTION(function) (function)()
其中,末尾的表示这是一个函数调用

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

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

这可以防止用户向宏传递错误类型的函数。

使用此宏有什么意义?为什么不直接调用这个函数呢?这可能是一个错误。事实上,这样一个宏是完全无用的。但是Apply敲响了一个钟声,您是否正在尝试实现?这对宏不起作用。