我需要一个宏,它只调用作为参数传递给该宏的函数。该函数是void类型,没有参数。
例如,如果我有以下功能:
void function(void) {
//doSomething
}
我需要一个使用 function 参数调用的APPLY_FUNCTION宏,只需调用该函数:
APPLY_FUNCTION(function);
我试图将宏定义为:
#define APPLY_FUNCTION(function) (function)
但它不起作用,当我尝试调用宏时,我得到一个没有效果的"语句"错误。
问题是我应该如何定义该宏?
答案 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)())
这可以防止用户将错误的函数传递给宏。