微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++预处理程序中的前缀增量

如何解决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 举报,一经查实,本站将立刻删除。