[問題] 請問如何看這一行的執行順序?

作者: zzss2003 (brotherD)   2018-05-21 16:39:15
圖:https://ideone.com/e.js/37Gfzz
此圖是用typecast把指向void的pointer轉型成指向一個function的pointer
在第16行: ( ( void(*)(void) )e.fn )();
我一直搞不太懂這裡operator的優先順序
()優先權最高,結合性是由左至右。如果是nested,最裡面的先執行
1.執行(*)的括號
2.執行(void)的括號
3.執行( void(*)(void) )的括號
4.執行( (void(*)(void) )e.fn )的括號
5.執行最右邊的()括號
情況: 少了第四行的括號,compile出現error。
解析: 也就是說加了第四行的括號,compiler才認為這整個東西是一個指向void(*)(void)
的pointer
問題: 為什麼一定要加第四個括號?
謝謝~
作者: wei115 (ㄎㄎ)   2018-05-21 17:02:00
function call優先權最高,如果括起來,那會先執行e.fn,然後才把回傳轉型成function更正:如果「沒有」刮起來
作者: james732 (好人超)   2018-05-21 19:13:00
轉型應該不算是執行?fn的type不要寫成void *就不用這麼麻煩了https://ideone.com/THZHeM 這樣不是很好嗎
作者: cutekid (可愛小孩子)   2018-05-21 19:40:00
推 1 樓唷,長知識了。
作者: AstralBrain   2018-05-22 03:48:00
function call和type cast的括號是不同的東西^ 和普通的括號 漏掉優先權和結合性都不一樣 你把很多東西混在一起了

Links booklink

Contact Us: admin [ a t ] ucptt.com