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