2014-02-16 103 views
0
#include<iostream> 
using namespace std; 

#define P d2 + 2 

int main() 
{ 
    int d2 = 4; 

    cout << P * 2; 
    getchar(); 
    return 0; 
} 

爲什麼這段代碼返回8而不是12? 當我認定P時,它有6個值。常數乘法的奇怪值

+1

運算符優先級?在編寫宏時儘可能使用'('括號') –

+1

更改爲'#define P(d2 + 2)' – Avt

+1

4 + 2 * 2 = 8.簡單的 – thang

回答

1

你忘了大括號。代碼中直接替換宏。所以,你的語句做:

cout << d2 + 2 * 2 

這是d2 + 4

修改您的宏

#define P (d2 + 2) 
3

的C(和C++)預處理器,其編譯器之前運行,使用指令#include#define時做了嚴格的更換。換句話說,預處理器運行後,所有的編譯器看到的是

cout << d2 + 2 * 2; 

你應該嘗試

#define P (d2 + 2) 

甚至更​​好完全避免宏。

+0

您忘記了宏定義中的另一對括號樣本 –

+0

@πάνταῥεῖ是的,如果d2是一個參數,宏可以從更多的括號中獲益,換句話說,如果我們有'#define P(x)x + 2',那麼它會更安全,因爲'#define P (x)((x)+ 2)',但在這種情況下,一個'inline int P(int x){return x + 2;}'會更好。 –