C 函数的替代语法,将另一个函数作为参数

Alternate syntax for C functions taking another function as a parameter

本文关键字:函数 另一个 参数 语法      更新时间:2023-10-16

我最近了解到这是合法的C:

#include <stdio.h>
int foo(int bar(int))
{
  return bar(42);
}
int bar(int x)
{
  return x * 42;
}
int main()
{
  printf("Baz = %dn", foo(bar));
  return 0;
}

编译时没有警告并按预期运行(即使作为 C 程序而不是 C++ 也可以编译和工作正常)

rep ~/Documents $ g++ -Wall test.cpp
rep ~/Documents $ ./a.out
Baz = 1764
rep ~/Documents $

为什么这种语法没有更频繁地使用,甚至在任何地方都没有被提及?

也许是因为您可以在另一个函数内部调用一个函数。这比函数作为参数更清楚。虽然被框架用来运行回调函数。作为普通开发人员,我更喜欢另一个函数的功能。