首页 > 解决方案 > C - 如果函数指针不为空,有没有办法在不重复函数指针的情况下调用函数指针?

问题描述

拿这个代码

int main() {
     void (*func)(int val) = NULL;

     if (func) { // check if NULL
          func(0); // call it
     }
}

有没有办法调用函数指针func而不必写func两次?

就像是

func? (0);

标签: cfunctionpointers

解决方案


你可以写一个宏:

#define CALL_FUNC(func, param) \
  do {                         \
    if (func) func(param);     \
  } while (0)

并使用它:

int main() {
     void (*func)(int val) = NULL;
     CALL_FUNC(func, 0);
}

编辑:我不会推荐它,我在我的项目中使用了一段时间。一段时间后我实际上放弃了它,它增加了一点无用的复杂性。

我终于回到了您当前的代码,但格式化为 1 行:

int main() {
     void (*func)(int val) = NULL;

     if (func) func(0);
}

推荐阅读