我使用以下构造看到了一些BSD代码:
typedef int driver_filter_t(void*);
这究竟是什么意思?我不认为它是一个函数指针,否则它会像typedef int (*driver_filter_t)(void*)
,对吧?
答案 0 :(得分:8)
typedef int driver_filter_t(void*);
这是函数类型的定义。它使driver_filter_t
成为可以描述为"类型的别名,其函数返回int
,其参数类型为void
"
对于所有typedef
,它会为现有类型创建别名,而不是新类型。
driver_filter_t
不是指针类型。你不能声明driver_filter_t
类型的东西(语法不允许使用typedef名称声明一个函数)。您可以声明一个对象是一个函数指针,例如:
driver_filter_t *func_ptr;
因为您不能直接使用函数类型名称而不添加*
来表示指针类型,所以为函数指针类型定义typedef
可能更常见,例如:
typedef int (*driver_filter_pointer)(void*);
但函数类型的typedef完全合法,我个人觉得它们更清晰。
答案 1 :(得分:1)
typedef int driver_filter_t(void*);
是函数类型的typedef。在C中,您可以将它用于driver_filter_t* fn_ptr
等函数指针。
在C ++中,您也可以使用该typedef来声明成员函数(但不能实现它们):
struct Some {
driver_filter_t foo; // int foo(void*);
driver_filter_t bar; // int bar(void*);
};