/ Vijos / 讨论 / 问答 /

想问问vijos上评测的c++是用什么编译器

测试的编译器似乎对代码要求很严格,编译时会出来一大堆warning。当然有的可以不必理会,但有时会出现一些悲剧~
比如说今天敲代码为了紧凑点,写了一行for(int i=0;i<T;S[i].pos=i++){...} 本地顺利编译通过

结果全wa,
然后不断对拍就是找不到原因,抓狂了好几个小时,
后来发现提示warning 说第二个分号后面i没定义
后来把S[i]=i放到{}里才A了

我很不明白为什么说i没定义,,求解释啊。。。。。。

2 条评论

  • @ 2015-05-31 19:39:09

    Vijos采用分布式评测架构,因此各个评测机的编译器版本不能够保证完全相同。我们会在配置、更新和维护评测机时尽力确保编译器版本为其官方网站所发布最新稳定版本。

    总的来说就是编译器版本会变,而且每个评测机的编译器版本不同。。

  • @ 2015-05-31 12:06:37

    C++ Code

    #include <cstdio>
    #include <cstring>
    using namespace std;
    int main(){
    int s[1000];
    int T=5;
    memset(s,0,sizeof(s));
    for(int i=0;i<T;s[i]=i++){
    printf("s[%d]=%d\n",i,s[i]);
    }
    memset(s,0,sizeof(s));
    for(int i=0;i<T;i++){
    s[i]=i;
    printf("s[%d]=%d\n",i,s[i]);
    }
    }
    这段代码在我的编译器(QP-MinGW 4.4.5)上的运行结果如下:
    s[0]=0
    s[1]=0
    s[2]=0
    s[3]=0
    s[4]=0
    s[0]=0
    s[1]=1
    s[2]=2
    s[3]=3
    s[4]=4
    1.避免s[i]=i++;这样的语句。
    2.vijos使用g++编译器,编译命令如下:
    g++ -O2 -s -Wall -o foo.exe foo.cpp -lm
    其中,-Wall告诉编译器显示最多的警告,在我的编译器上,用-Wall编译上面这段代码也会产生同样的警告:
    [Warning] operation on 'i' may be undefined

  • 1