#include<iostream>
using namespace std;
#define P d2 + 2
int main()
{
int d2 = 4;
cout << P * 2;
getchar();
return 0;
}
爲什麼這段代碼返回8而不是12? 當我認定P時,它有6個值。常數乘法的奇怪值
#include<iostream>
using namespace std;
#define P d2 + 2
int main()
{
int d2 = 4;
cout << P * 2;
getchar();
return 0;
}
爲什麼這段代碼返回8而不是12? 當我認定P時,它有6個值。常數乘法的奇怪值
你忘了大括號。代碼中直接替換宏。所以,你的語句做:
cout << d2 + 2 * 2
這是d2 + 4
。
修改您的宏
#define P (d2 + 2)
的C(和C++)預處理器,其編譯器之前運行,使用指令#include
和#define
時做了嚴格的更換。換句話說,預處理器運行後,所有的編譯器看到的是
cout << d2 + 2 * 2;
你應該嘗試
#define P (d2 + 2)
甚至更好完全避免宏。
您忘記了宏定義中的另一對括號樣本 –
@πάνταῥεῖ是的,如果d2是一個參數,宏可以從更多的括號中獲益,換句話說,如果我們有'#define P(x)x + 2',那麼它會更安全,因爲'#define P (x)((x)+ 2)',但在這種情況下,一個'inline int P(int x){return x + 2;}'會更好。 –
運算符優先級?在編寫宏時儘可能使用'('括號') –
更改爲'#define P(d2 + 2)' – Avt
4 + 2 * 2 = 8.簡單的 – thang