Re: [問題] 有關巨集

作者: v3dys6f3a3j5 (柳上上)   2016-03-16 11:11:50
※ 引述《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)??
我真的有爬文 我看別人都是下面推文一點就通
我看推文看了半天 還是不懂 還是有哪一篇文章我漏掉了
作者: nowar100 (拋磚引玉)   2016-03-16 11:13:00
undefined behavior 不需要找為什麼...
作者: Frozenmouse (*冰之鼠*)   2016-03-16 11:31:00
一個先問是什麼就輸了的概念 (?
作者: suwako   2016-03-16 11:44:00
我猜測做運算前會先確認左右兩項 所以第一個運算左右兩邊的++n都會先做 這樣就會變成6*5*5了
作者: Caesar08 (Caesar)   2016-03-16 12:19:00
你真的有看13誡? 你真的有認真看13誡?
作者: nowar100 (拋磚引玉)   2016-03-16 12:27:00
如果你真的想知道為什麼 大概告訴你 common subexpressin 在 AST 還有後面優化階段,可能被各種組合方式亂兜所以可能每家compiler不同選項都會有不同結果所以 short answer: 不需要找為什麼
作者: LPH66 (-6.2598534e+18f)   2016-03-16 13:24:00
本版 #1Em1oVzU 提供其中三種詳解這三種詳解都確實有不同語言或不同編譯器實作之

Links booklink

Contact Us: admin [ a t ] ucptt.com