【搬运自LOJ】如何在不提供 NOIlinux 2.0 环境的考点避免编译错误

cookiebus 2023-10-04 12:19:00 2023-10-04 12:20:39 66

本帖收录部分建议,以帮助选手在不提供 NOIlinux 2.0 环境的考点避免出错。这里的错误主要指本机编译通过但在 NOIlinux 中 CE。

如有其它建议,欢迎回复。欢迎转载本帖。

使用这些建议时请确保你理解其内容,由于使用这些建议造成的问题与本帖作者无关。

用 #include<bits/stdc++.h>(内含 OI 通常能用到的所有头文件)而不是逐个写头文件,以免实际上漏了头文件但本地环境自动补齐。 把整个程序装进自己的 namespace,以免和库中的名称冲突(比如 next 和 pipe) 如果题目没有特别说明,编译选项尽量加上 -std=c++14。如果这样不能编译(指的是编译器版本过低不支持 C++14 而不是你的程序编译错误!),就至少加上 -std=c++11。 编译选项加上 -Wall,让编译器提醒一些常见错误,比如函数不写返回值。 编译选项加上 -fno-ms-extensions(关闭一些和 msvc 保持一致的特性,例如,关闭后不标返回值类型的函数会报 CE 而不是默认为 int)。 示例程序:

#include<bits/stdc++.h>

using namespace std;

namespace my_namespace{
    int main(){
        int a,b;
        cin>>a>>b;
        cout<<a+b<<endl;
        return 0;
    }
};

int main(){
    return my_namespace::main();
}

编译选项:

g++ a.cpp -o a -std=c++14 -O2 -Wall -fno-ms-extensions

  • 函数无返回值在低版本g++中开O2概率性正常执行,高版本g++中必re。

  • 小心bits的斜杠在win下反过来打也能过编

  • 最后几分钟把ide关掉后在终端下编译每个程序(而不是ide中用快捷键),避免误操作敲字符进去

  • size命令检查静态内存

  • 开内存检测跑极限数据(win下别忘了开栈)

{{ vote && vote.total.up }}

共 8 条回复

071maozihan

还有一条:亲身经历,万能头的h别打成H,本地编译能过,但是H可以过本地编译

zhangyi

%%%

heyucheng

qp

chenyining

前排的前排的前排的前排的前排

heyucheng

qp

06wuyanjun

qp

heyucheng

前排的前排

heyucheng

前排