下面的代碼應該返回值216,但它返回392是(7 * 7 * 8)。有人可以請我解釋一下嗎?C++/g ++宏異常
#include<iostream>
#define cube(x) (x*x*x)
using namespace std;
int main()
{
int x=5;
cout<<cube(++x);
cout<<endl;
return 0;
}
下面的代碼應該返回值216,但它返回392是(7 * 7 * 8)。有人可以請我解釋一下嗎?C++/g ++宏異常
#include<iostream>
#define cube(x) (x*x*x)
using namespace std;
int main()
{
int x=5;
cout<<cube(++x);
cout<<endl;
return 0;
}
宏展開後,您將獲得:
using namespace std;
int main()
{
int x=5;
cout<<(++x*++x*++x);
cout<<endl;
return 0;
}
,這是不確定的行爲。
只需用一個函數代替cube
宏:
int cube(int x) {
return x * x * x;
}
你真的應該使用一個功能,而不是一個宏。 cube(++x)
擴大爲
++x*++x*++x
這根本不是我們想要的。
感謝烏拉圭回合的建議。我沒有試圖用這個解決問題。我只是對這種行爲感到好奇。事情是如果x被替換爲x ++那麼它不應該是7 * 8 * 9? – xeon
它可能是*任何*結果。您不允許在表達式中多次更改變量的值。如果你這樣做,就像這裏一樣,語言標準沒有說明會發生什麼。所以我們不知道。 –
感謝您的建議。我沒有試圖用這個解決問題。我只是對這種行爲感到好奇。事情是如果x被替換爲x ++那麼它不應該是7 * 8 * 9? – xeon
@xeon這是未定義行爲的一部分。你不能指望這個程序有任何特別的結果。 – juanchopanza