2017-04-05 46 views
-7
#include <iostream> 
#define func(x) x*x-x 

using namespace std; 

int i=2; 
int main(void) { 
    cout << "func(i+3) is " << func(i+3) << endl; 
} 

此打印12張?它不應該打印20嗎?C++如何打印12?

+4

在您的頭部手動進行更換。來吧,做吧。 –

+2

這就是爲什麼宏是邪惡的,應該避免,直到你知道你需要一個。 – NathanOliver

+0

那麼,我需要學習什麼來學習這個?任何話題? –

回答

8

宏替換隻是文字替換。所以字符串「x」在字符串「x * x-x」中被替換爲字符串「i + 3」。所以:

「×* XX」 - > 「i + 3中* I + 3-I + 3」

這然後被編譯成代碼:

我+ 3 * i + 3中-i的3

其評估:

我+ 3 * i + 3中,i + 3中 - > 2 + 3 * 2 + 3-2 + 3 - > 2 + 6 + 3-2 + 3 - > 12