我一直在实现用户线程库作为我的任务的一部分。
我不理解makecontext
函数:
makecontext(&(mainthread->threadctx),(void(*)(void))start_funct,1,args)
(void(*)(void))start_funct
究竟是什么意思?为什么我必须这样写呢?
我不能把它写成
makecontext(&(mainthread->threadctx),start_funct,1,args) ?
请耐心等待我,我还不熟悉指针:)
答案 0 :(得分:1)
void(*)(void)
表示“指向不带参数的函数的指针并返回void
”。
因此(void(*)(void))start_funct
正在向上述类型转换start_funct
(我们可以假设它是某种函数指针)。 (有一个very useful online tool可以帮助你解决这个问题,直到你更容易阅读声明。)
您必须这样写,因为start_funct
的签名不是void start_funct(void)
,因此需要进行投射。