我读code of the bitcoin trezor MCU,发现这个:的C函数++(无效(**)())奇怪的铸造
(*(void (**)())(FLASH_APP_START + 4))();
通过打破一些东西,我试着来分析一下这一行的意思是:
( *(void (**)())(FLASH_APP_START + 4) ) ();
我可以看到,这是一个没有参数的函数调用,由于()
末,并且该功能是什么
*(void (**)())(FLASH_APP_START + 4)
指向。
我知道FLASH_APP_START + 4
将解决到的东西,所以我只需要弄清楚的是:
*(void (**)())
它解析为任何void (**)()
点。但是什么是void (**)()
?也许,它看起来像一个函数的转换。但我不确定。你能给我一个这个叫什么的例子吗?你为什么需要这个?
返回void的函数有什么意义? – Gatonito
你为什么使用typedef?它使我困惑,有没有一种方法来使用它没有typedef?你怎么能重写'空白'?是否允许? – Gatonito
@Gatonito函数是一个可以用来打包代码的抽象。它不需要返回任何东西,这只是一种切断事物的方式,使人类更容易消化。具有巨大功能的代码很难理解。编译器和机器都不关心函数是否返回任何东西。 –