int128 在 linux下使用O2 优化开关会出现玄学错误
  • 板块学术版
  • 楼主lnxxqz
  • 当前回复20
  • 已保存回复20
  • 发布时间2023/3/23 20:28
  • 上次更新2023/10/23 20:45:34
查看原帖
int128 在 linux下使用O2 优化开关会出现玄学错误
574506
lnxxqz楼主2023/3/23 20:28

以下代码在 NOI Linux 以及很多 Linux 系统下 用 g++ 编译器开启 O2 会出现错误。

正确的输出是 12345 ,而实际输出是 2 。

#include<iostream>
#include<ctime>
#define i128 __int128

int xl[5];

int main(){
    i128 tot=1;
    int x=clock();
    xl[1]=2;
    int zh=1;
    while(zh<=x){
        tot++;
        for(i128 i=tot-1;i>=1;i--){
            xl[i]=12345;
        }
        std::cerr<<xl[1]<<std::endl;
        zh=10000000;
    }
    return 0;
}
2023/3/23 20:28
加载中...