作者zzss2003 (brotherD)
看板C_and_CPP
標題[問題] 請問如何看這一行的執行順序?
時間Mon May 21 16:39:15 2018
圖:
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
問題: 為什麼一定要加第四個括號?
謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1526891960.A.C15.html
推 wei115: function call優先權最高,如果括起來,那會先執行e.fn, 05/21 17:02
→ wei115: 然後才把回傳轉型成function 05/21 17:02
→ wei115: 更正:如果「沒有」刮起來 05/21 17:03
→ james732: 轉型應該不算是執行? 05/21 19:13
→ james732: fn的type不要寫成void *就不用這麼麻煩了 05/21 19:13
推 cutekid: 推 1 樓唷,長知識了。 05/21 19:40
推 AstralBrain: function call和type cast的括號是不同的東西 05/22 03:48
→ AstralBrain: ^ 和普通的括號 漏掉 05/22 03:50
→ AstralBrain: 優先權和結合性都不一樣 你把很多東西混在一起了 05/22 03:52
謝謝一樓 長知識惹
※ 編輯: zzss2003 (60.248.26.157), 05/22/2018 09:36:12