这个typedef语句的含义是什么?

3

我正在进行一个C++项目,我使用的库之一有以下代码:

typedef void (*thread_startfunc_t) (void *);

有人能否解释一下这是在做什么?谢谢。

2个回答

7

它将thread_startfunc_t定义为类型"指向一个函数的指针,该函数接受一个参数,类型为void *,并返回void"的同义词。

请注意,_t后缀实际上是由POSIX保留的,因此我认为在这方面这是糟糕的代码,但对于指向函数类型使用typedef总是一个好主意。这是一种非常常见的做法。


1
你为什么在“指向a的指针”周围加上了[括号]?typedef确实声明了指针类型的同义词;如果在thread_startfunc_t之前没有*,它将创建函数类型的同义词。哦,我不认为C++标准保留了“_t”,我认为它是由POSIX保留的。 - Keith Thompson
@KeithThompson:两点都说得很好。我会调整我的答案。谢谢。 - ruakh
在编程中,将指向函数的指针类型进行typedef是很常见的,但是对于函数类型本身进行typedef也是一种有效的方法。例如:typedef void (thread_startfunc_t) (void *); thread_startfunc_t *func = whatever; - Keith Thompson

1

这是一个函数指针的typedef。也就是说,thread_startfunc_t变量是一个指向没有返回值(void)且带有void*参数的函数的指针。它使得在需要指向符合上述描述的函数的指针的地方更容易编写thread_startfunc_t,而不是在各个地方使用笨拙、令人困惑的语法。

例如:

void StartThread(thread_startfunc_t StartFunction); // Not actually a function, just an example.

那么,如果我现在想调用带有参数函数foo的StartThread方法,我该怎么做? - Nosrettap
@Nosrettap:你可以写StartThread(&foo)(或者如果你喜欢的话,只写StartThread(foo))。 - ruakh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接