c++/g++ 宏异常
Macro anomaly in c++/g++
下面的代码应该 return 值 216 但它 returns 392 即 (7*7*8) 。有人可以解释一下吗?
#include<iostream>
#define cube(x) (x*x*x)
using namespace std;
int main()
{
int x=5;
cout<<cube(++x);
cout<<endl;
return 0;
}
你真的应该使用函数而不是宏。 cube(++x)
扩展为
++x*++x*++x
这根本不是我们想要的。
宏展开后你将得到:
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;
}
下面的代码应该 return 值 216 但它 returns 392 即 (7*7*8) 。有人可以解释一下吗?
#include<iostream>
#define cube(x) (x*x*x)
using namespace std;
int main()
{
int x=5;
cout<<cube(++x);
cout<<endl;
return 0;
}
你真的应该使用函数而不是宏。 cube(++x)
扩展为
++x*++x*++x
这根本不是我们想要的。
宏展开后你将得到:
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;
}