關於C++中的#define

#include <iostream>
using namespace std;
#define ADD(x, y) x+y//試卷上是減號,本人覺得是加號

int main()
{
	int m = 3;
	int n = 4;
	m += m * ADD(n, m);
	cout << m << endl;
	return 0;
}

請看上面的代碼,你覺得m最後會輸出?呢。

其實在C++裏,#define宏定義

#define ADD(x, y) x+y
這種方式最後在編譯的時,僅僅做的是代碼替換,這就像是語句

m += m * ADD(n, m);
其實就會被編譯爲:

m += m *n+m;
之後計算m*n=12,然後+m=15,然後m+=15(也就是m=m+15)

所以最後結果爲18........

【PS: 】貌似跟#define與運算符優先級沒有關係的吧,起碼我覺得不應該是這個說法...


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章