[問題] #define 輸出問題

作者: Kuba4ma (哦吼)   2021-10-08 21:23:10
#include <stdio.h>
#define SWAP(a, b) tmp = a; a = b ; b = tmp
int main(){
int a = 10;
int b = 20;
int tmp = 0;
int n = 6;
if(n>6)
SWAP(a,b);
printf("%d %d %d\n", tmp, a, b);
}
自己覺得if應該不會執行(因為沒有縮排) 然後只執行SWAP那行 所以是 10 20 10
但是在vscode上編譯出來的結果是 0 20 0
我不太懂為什麼會這樣
麻煩大神開示 謝謝
作者: nh60211as   2021-10-08 21:27:00
變成 if(n>6){tmp=a;} a=b; b=tmp;還有C++不管縮排,是看 ; 決定一個 statment 的
作者: dces4212 (flawless)   2021-10-08 21:54:00
do while 0
作者: cuteSquirrel (松鼠)   2021-10-08 22:18:00
答案同一樓。
作者: Lipraxde (Lipraxde)   2021-10-09 00:18:00
有時後需要前處理的程式並不好讀,這時可以用 gcc -E,得到前處理完後的程式碼,再利用 clang-format 排版這樣問題就會變得顯而易見了
作者: NciscalA   2021-10-09 03:12:00
善用 do while(0) 可以減少這種意外
作者: q6534gas1793 (Ming)   2021-10-09 07:54:00
好奇為什麼答案不是0 10 20,而是0 20 0
作者: bhbbbbb (影)   2021-10-09 09:55:00
實際上會被執行到的是 a=b; 和 b=tmp; 所以是 0 20 0 沒錯
作者: q6534gas1793 (Ming)   2021-10-09 10:34:00
感謝樓上,對照一樓我才終於懂了。一直當成類似function的東西
作者: b0920075 (Void)   2021-10-09 14:02:00
有點眼熟...在看發哥考古喔?
作者: wawi2 (@@)   2021-10-09 14:41:00
答:男生寫macro的都剁掉
作者: chuegou (chuegou)   2021-10-09 16:48:00
不要這樣 我很愛用X-macro
作者: longlongint (華哥爾)   2021-10-10 17:36:00
因為這是寫爛的程式碼 看不懂很正常{tmp=a;a=b;b=tmp}另外還有掛號等號左邊問題 煩括弧上面有do while 大法還不錯但我還是建議寫function
作者: HMKRL (HMKRL)   2021-10-10 21:46:00
拿Macro做這種事還滿意義不明的 你又不一定有tmp存在
作者: simon860730 (╰電磁學╮╭爆炸囉╯)   2021-10-12 08:52:00
大概是這樣吧(?) http://i.imgur.com/HcylhqP.jpg
作者: stupid0319 (徵女友)   2021-10-12 13:09:00
看成 SWAG
作者: gusion   2021-10-12 21:25:00
我倒覺得macro在一些情況下滿好用的以SWAP來說,可以做成適用多種型別把一個參數作為型別,也就是SWAP(type,a,b)這樣jdoodle.com/ia/hYShttps://www.jdoodle.com/ia/hYS
作者: jacky1989   2021-10-13 15:59:00
括號很重要,我都跟學弟說,不管有幾行,你就是給我加括號,別偷懶。回到這問題,把if加上括號,你會發現不同的小天地
作者: HenryLin123 (HenryLin123)   2021-10-14 05:25:00
C 縮排 CC
作者: plase (plase)   2021-10-16 21:17:00
哈哈
作者: DerLuna (陽月)   2021-10-25 00:53:00
不建議這種東西用macro
作者: alongalone (沿著孤單的路)   2021-10-26 11:29:00
看哪本書學的?
作者: ddavid (謊言接線生)   2021-10-26 17:45:00
除了if習慣加大括號以外,macro的誤用問題會更大,沒真的搞懂macro在幹嘛的話,會連#define square(x) (x)*(x)這經典題為何會出錯都不知道XD連括號為什麼要括,要括幾層都不知道,還不如乖乖function
作者: Dracarys (MayShowGunMore)   2021-10-26 21:57:00
作者: bizer (bizer)   2021-12-31 17:25:00
不括弧都只會執行一行判斷一行

Links booklink

Contact Us: admin [ a t ] ucptt.com