Re: [問題] 有關巨集

看板C_and_CPP作者 (San)時間8年前 (2016/03/16 11:11), 編輯推噓2(209)
留言11則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《d5123 (dd)》之銘言: : #define CUBE(x) x*x*x : int n = 3; : CUBE(++n) = ? : 我用電腦跑的結果是150, : 但不知實際運算過程為何? : 請板上高手賜教。 我在讀程式語言的時候也有遇到類似題目 我知道是++n*++n*++n 但我還是不知道為甚麼是150 我有看過13誡了 也爬過文 也看過精華區 真的找不到為甚麼 那三個數到底是甚麼 是?*?*? 這中間的運算過程是怎麼跑的 如果是5*5*6 這是怎麼加出來的 前面兩個加了兩次(n=5) 最後一個加三次(n=6)?? 我真的有爬文 我看別人都是下面推文一點就通 我看推文看了半天 還是不懂 還是有哪一篇文章我漏掉了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.175.26.70 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1458097913.A.9E1.html

03/16 11:13, , 1F
undefined behavior 不需要找為什麼...
03/16 11:13, 1F

03/16 11:31, , 2F
一個先問是什麼就輸了的概念 (?
03/16 11:31, 2F

03/16 11:44, , 3F
我猜測做運算前會先確認左右兩項 所以第一個運算左右兩邊
03/16 11:44, 3F

03/16 11:45, , 4F
的++n都會先做 這樣就會變成6*5*5了
03/16 11:45, 4F

03/16 12:19, , 5F
你真的有看13誡? 你真的有認真看13誡?
03/16 12:19, 5F

03/16 12:27, , 6F
如果你真的想知道為什麼 大概告訴你 common subexpressi
03/16 12:27, 6F

03/16 12:27, , 7F
n 在 AST 還有後面優化階段,可能被各種組合方式亂兜
03/16 12:27, 7F

03/16 12:28, , 8F
所以可能每家compiler不同選項都會有不同結果
03/16 12:28, 8F

03/16 12:28, , 9F
所以 short answer: 不需要找為什麼
03/16 12:28, 9F

03/16 13:24, , 10F
本版 #1Em1oVzU 提供其中三種詳解
03/16 13:24, 10F

03/16 13:25, , 11F
這三種詳解都確實有不同語言或不同編譯器實作之
03/16 13:25, 11F
文章代碼(AID): #1MwCxvdX (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
2
4
完整討論串 (本文為第 2 之 2 篇):
問題
2
4
文章代碼(AID): #1MwCxvdX (C_and_CPP)