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

看板C_and_CPP (C/C++)作者 (brotherD)時間7年前 (2018/05/21 16:39), 7年前編輯推噓3(307)
留言10則, 4人參與, 7年前最新討論串1/1
圖: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

05/21 17:02, 7年前 , 1F
function call優先權最高,如果括起來,那會先執行e.fn,
05/21 17:02, 1F

05/21 17:02, 7年前 , 2F
然後才把回傳轉型成function
05/21 17:02, 2F

05/21 17:03, 7年前 , 3F
更正:如果「沒有」刮起來
05/21 17:03, 3F

05/21 19:13, 7年前 , 4F
轉型應該不算是執行?
05/21 19:13, 4F

05/21 19:13, 7年前 , 5F
fn的type不要寫成void *就不用這麼麻煩了
05/21 19:13, 5F

05/21 19:17, 7年前 , 6F
https://ideone.com/THZHeM 這樣不是很好嗎
05/21 19:17, 6F

05/21 19:40, 7年前 , 7F
推 1 樓唷,長知識了。
05/21 19:40, 7F

05/22 03:48, 7年前 , 8F
function call和type cast的括號是不同的東西
05/22 03:48, 8F

05/22 03:50, 7年前 , 9F
^ 和普通的括號 漏掉
05/22 03:50, 9F

05/22 03:52, 7年前 , 10F
優先權和結合性都不一樣 你把很多東西混在一起了
05/22 03:52, 10F
謝謝一樓 長知識惹 ※ 編輯: zzss2003 (60.248.26.157), 05/22/2018 09:36:12
文章代碼(AID): #1R0eMumL (C_and_CPP)
文章代碼(AID): #1R0eMumL (C_and_CPP)