Re: [FAQ&FME] C 語言新手十誡
看板C_and_CPP (C/C++)作者StubbornLin (Victor)時間19年前 (2005/08/28 00:45)推噓1(1推 0噓 4→)留言5則, 1人參與討論串10/14 (看更多)
※ 引述《yaca (Jay)》之銘言:
: 在k大原po的第十一點,macro中,如果我的程式碼:
: #include<stdio.h>
: #define squared(a)a*a-a*a
: int main(void){
: int x=3,i;
: i=squared(++x);
: printf("i=%d\n",i);
: return 0;
: }
: 為什麼答案為-24,可以教教我嗎?
: 謝謝囉
是第十點吧? macro中 的變數一定要用括號括起來
至於為什麼?
因為 編譯器所做的 並不是把數字帶入該變數 算出東西來
它是把整個()裡的東西 都在該變數的位置取代掉
也就是說 squared(a)a*a-a*a
用squared(++x)
這樣的式子 經由編譯器展開
會變成這樣 i = ++x*++x-++x*++x;
至於為什麼會是-24 我也不清楚...
因為我對於運算的優先順序沒有深入的研究
原因在於我認為....該用括號括起來的式子
就算運算有優先權 也要括起來
括起來的話 就會強迫裡面的東西先完成
至於 ++x*++x-++x*++x;的運算順序 我也想知道 XD 誰來解釋一下
--
VICTOR工作室
URL : http://www.kinmen.info/vic/
C/C++
Visual Basic 6.0
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.116.64.30
推
220.130.208.168 08/28, , 1F
220.130.208.168 08/28, 1F
→
220.130.208.168 08/28, , 2F
220.130.208.168 08/28, 2F
→
220.130.208.168 08/28, , 3F
220.130.208.168 08/28, 3F
→
220.130.208.168 08/28, , 4F
220.130.208.168 08/28, 4F
→
220.130.208.168 08/28, , 5F
220.130.208.168 08/28, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 10 之 14 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章