我讀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函數是一個可以用來打包代碼的抽象。它不需要返回任何東西,這只是一種切斷事物的方式,使人類更容易消化。具有巨大功能的代碼很難理解。編譯器和機器都不關心函數是否返回任何東西。 –