wol*_*f3d 1 c++ increment prefix c-preprocessor
有人可以解释为什么b = 150?
#define CUBE(X) ((X) * (X) * (X))
using namespace std;
int main( void )
{
int a = 3,b = 0;
cout << "before "<< endl;
cout << "a = " << a;
cout << endl;
cout << "b = " << b;
cout << endl;
cout << "after"<< endl;
b = CUBE( ++a );
cout << "a = " << a;
cout << endl;
cout << "b = " << b;
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Lig*_*ica 10
因为你正在使用宏.宏不是函数.
这条线:
b = CUBE( ++a );
Run Code Online (Sandbox Code Playgroud)
被重写为:
b = ((++a) * (++a) * (++a))
Run Code Online (Sandbox Code Playgroud)
在您的代码编译之前.
然后代码调用Undefined Behavior,因为您a在序列点之间增加了几次.
如果你使用一个函数会更好.
| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |