[問題] #define swap的問題

看板C_and_CPP作者 (不下棋)時間15年前 (2010/09/14 08:51), 編輯推噓3(3018)
留言21則, 8人參與, 最新討論串1/1
#define n 5 #define swap(x,y) {int t; t=x; x=y; y=t; } void main(void) { int array[n] = { 5, 8, 2, 1, 3 }; swap(array[0],array[2]); } 為什麼swap沒用reference或pointer之類的 就可以把交換的結果回傳給array呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.124.170.59

09/14 08:54, , 1F
你把那行就地展開會長什麼樣子 就知道了
09/14 08:54, 1F

09/14 08:54, , 2F
請問#define是在什麼時候被處理的? 怎麼處理?
09/14 08:54, 2F

09/14 08:55, , 3F
Compile之前就會先處理 詳情請翻書或Google
09/14 08:55, 3F

09/14 08:56, , 4F
展開?怎麼做阿?
09/14 08:56, 4F

09/14 08:56, , 5F
gcc -E 觀察出來結果會長怎樣
09/14 08:56, 5F

09/14 08:59, , 6F
沒裝gcc...
09/14 08:59, 6F

09/14 09:00, , 7F
手邊有C的書就去翻來看, 沒書就問Google
09/14 09:00, 7F

09/14 09:01, , 8F
IDE 是 ?
09/14 09:01, 8F

09/14 09:11, , 9F
VC的話: 專案右鍵→[屬性]→[C/C++]→[命令列]→在下
09/14 09:11, 9F

09/14 09:11, , 10F
VC 的話加上 /P 會把前置處理完後的樣子輸出成 .i 檔
09/14 09:11, 10F

09/14 09:12, , 11F
啊 插隊了:p
09/14 09:12, 11F

09/14 09:12, , 12F
的方塊裡打/E, 處理後的程式碼會在輸出視窗裡
09/14 09:12, 12F

09/14 09:12, , 13F
跟L大的不一樣呢 :)
09/14 09:12, 13F

09/14 09:13, , 14F
嘛, 我會推薦 /P 是因為標準標頭檔通常都很長一串 XD
09/14 09:13, 14F

09/14 09:14, , 15F
所以我會習慣丟去檔案裡
09/14 09:14, 15F

09/14 09:23, , 16F
這樣應該比較好, 趕緊來試試~
09/14 09:23, 16F

09/14 17:59, , 17F
因為你的swap是macro,不是function。That's all!
09/14 17:59, 17F

09/14 22:49, , 18F
話說macro不是要括號嗎?
09/14 22:49, 18F

09/15 00:04, , 19F
do{ /* your codes */ }while(0) //強迫macro當func使用
09/15 00:04, 19F

09/15 00:15, , 20F
加括號是為了避免一些非預期的結果, 其實就算加了硬是
09/15 00:15, 20F

09/15 00:16, , 21F
想當function來用給一堆奇怪的東西, 你也防不了
09/15 00:16, 21F
文章代碼(AID): #1CZiSAJM (C_and_CPP)