小编Dan*_* Xu的帖子

英特尔C++编译器错误?(指针别名)

我正在使用英特尔C++编译器12.0,并且正在开发类似于以下的程序,这非常简单明了.while循环应该在第一次运行时停止.但是,当我使用英特尔编译器使用/ O2标志构建代码时,while循环永远不会停止.如果我禁用优化,或使用visual C++,循环将正常退出.如果我将pt-> flag更改为p.flag,我认为这是相同的,循环也会正常退出.我认为这与英特尔的优化有关.这是英特尔编译器中的错误吗?或者我错过了什么?

#include <iostream>

using namespace std;

struct para {
    int i;  
    int flag;
};

int main(int argc, char **argv)
{
    para p;
    p.i = 0;
    p.flag = 1;

    para * pt = &p;
    cout << "loop started" << endl;

    int i;
    while (p.flag) {
        if (p.i == 0) {
            for (i=0; i<1; i++) {
                if (p.flag != 1)
                    break;
            }
            if (i==1) {
                pt->flag = 0;
            }
        }
    }
    cout << "loop stopped" << endl;
    return 1; …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction intel

8
推荐指数
1
解决办法
818
查看次数

标签 统计

c++ ×1

compiler-construction ×1

intel ×1