[問題] 請問這個程式的結果是怎麼來的呢?

看板C_and_CPP作者 (讓自已更好)時間11年前 (2013/05/18 22:44), 編輯推噓5(5011)
留言16則, 9人參與, 最新討論串1/1
有個問題想請教大家: C語言 程式碼如下: #include "stdafx.h" #include <stdio.h> #define SQR(r) (r*r) int main(void) { printf( "%d", SQR(3+3+2) ); return 0; } 這個程式執行後的結果是17,是怎麼求算出來的呢? 不是應該是64嗎? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.181.55

05/18 22:45, , 1F
會被展開成3+3+2*3+3+2
05/18 22:45, 1F

05/18 22:46, , 2F
置底十三誡之九
05/18 22:46, 2F

05/18 22:49, , 3F
g++ -E可以看preprocessing後的結果
05/18 22:49, 3F

05/18 22:54, , 4F
看到 stdafx.h 應該不是 g++ xD
05/18 22:54, 4F

05/18 22:58, , 5F
謝謝b大的幫忙。感謝^^。
05/18 22:58, 5F

05/18 22:59, , 6F
我是用visual c++,是初學者,請問在這種編譯器下,怎麼看
05/18 22:59, 6F

05/18 23:01, , 7F
執行過程的結果呢?謝謝^^
05/18 23:01, 7F

05/19 03:41, , 8F
初學者就狂埋breakpoint,狂埋printf
05/19 03:41, 8F

05/19 04:36, , 9F
3+3+2*3+3+2= 17 沒錯啊
05/19 04:36, 9F

05/19 04:37, , 10F
你要64 你得用SQR((3+3+2))
05/19 04:37, 10F

05/19 08:24, , 11F
樓上不對, 應該是#define SQR(r) ((r)*(r))
05/19 08:24, 11F

05/19 10:14, , 12F
樓上兩位說的都對,你們的方法都可以得到64。謝謝你們^^
05/19 10:14, 12F

05/19 11:23, , 13F
jacky 是正解
05/19 11:23, 13F

05/19 11:28, , 14F
define 不注意容易爆炸
05/19 11:28, 14F

05/19 11:35, , 15F
不要寫 MACRO, 新手應該沒什麼機會用到它. 要常數用
05/19 11:35, 15F

05/19 11:35, , 16F
static const, 要函式用 inline, 速度都一樣的
05/19 11:35, 16F
文章代碼(AID): #1HbvFgy4 (C_and_CPP)