如何解决C ++预处理程序中的前缀增量
| 有人可以解释为什么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;
}
解决方法
因为您正在使用宏。宏不是函数。
该行:
b = CUBE( ++a );
被重写为:
b = ((++a) * (++a) * (++a))
在代码编译之前。
然后,代码将调用“未定义行为”,因为在序列点之间您将“ 3”递增了几次。
如果您改用函数会更好。
, (++a) * (++a) * (++a)
是未定义的行为。
, 未定义的行为-您在序列点之间多次修改a
。这就是“ 6”功能是极为优越的选择的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。