gpt4 book ai didi

c - 什么情况下应该使用函数签名void *(*)()?

转载 作者:太空宇宙 更新时间:2023-11-04 06:07:38 25 4
gpt4 key购买 nike

当我看到 pthread_create 的概要时,我想到了这个问题,即:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);

我不明白为什么第三个参数必须那么复杂。它的目的只是为了传递一个函数地址。那么他们为什么不使用

void (*start_routine)(void *)

甚至

void (start_routine)(void *)

一般情况下,我们应该在什么情况下使用像上面第三个参数这样的函数签名?

最佳答案

C 函数指针语法是出了名的丑陋且难以理解。基本上答案是它必须是那样的,因为 C 语言的设计者就是这样决定的。

void *(*start_routine) (void *) 指一个指向函数的指针,接受一个 void * 类型的参数,并返回一个 void *

你给出的第一个例子,void (*start_routine)(void *) 也是一个函数指针,也有一个 void * 参数,但什么都不返回。

另一个例子,void (start_routine)(void *) 不是函数指针,它不返回任何东西。括号实际上在那里没有任何作用,它与编写 void start_routine(void *) 相同,我很确定不允许将其作为参数类型。

编辑:那个实际上被允许作为参数,但它没有被广泛使用并且仍然有错误的返回类型。

希望事情已经解决了。

关于c - 什么情况下应该使用函数签名void *(*)()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com