如何在一个 typedef 声明中声明多个函数指针类型?

How can I declare multiple function pointer types in one typedef declaration?

我可以

typedef int a, b;

但我做不到

typedef void(*the_name_1, *the_name_2)(...);

有没有办法同时 typedef 2 个函数指针类型?

C/C++ 中的多个声明具有误导性,因为 * 链接到变量而不是类型:

typedef int a, *b, (*c)();

static_assert(std::is_same_v<int, a>);
static_assert(std::is_same_v<int*, b>);
static_assert(std::is_same_v<int (*)(), c>);

所以你的one-liner会是

typedef void(*the_name_1)(...), (*the_name_2)(...);

暂时忽略typedef

void (*the_name_1, *the_name_2)(...);

请记住,C 声明(以及 C++,大部分)遵循“声明反映使用”的规则,这表示 (*the_name_1, *the_name_2) 是一个可以用任何参数调用的表达式,返回 void。这使 the_name_2 成为一个指向函数的指针,该函数接受任何内容并返回 void,但它不会告诉您任何有关 the_name_1 类型的信息,除了它应该可以取消引用之外。

这就是为什么 让你写了两次参数列表。这样你就可以说 the_name_1the_name_2 都可以被取消引用,然后用任何东西调用,给你 void。它完全类似于

char foo[42], bar[69];

唯一的区别 typedef 是声明的名称成为 otherwise-declared 变量将具有的类型的名称。