Ender's Code Style for OI

本文介绍博主在OI中常见代码风格,也用来规范自己。
本文内容自发稿开始保证实施

Ender’s Code Style for OI

概览

可以使用万能头文件#include <bits/stdc++.h>
使用using namespace std;时,应放在#include下一行。
结构体应放于所有函数之前,main函数应放于程序末尾。

缩进

所有同级命令均应为等长缩放长度,所有被包含的命令应使用4个空格或等长Tab缩进。

大括号

对于除结构体以外的需要大括号的命令和函数,左大括号不应换行,左边必须有一个空格;右大括号与命令应为等长缩进,例:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 结构体
struct Node
{
// do something...
}

// 其他,以if为例
if(condition) {
// do something...
}
else {
// do something...
}

cmp以外的函数,右括号均应换行,cmp如果较短,右括号可以不换行,例:

1
2
3
4
5
cmp(int a,int b) {return a>b;}

void search(int cur) {
// do something...
}

除循环嵌套以外,如果包含的命令只有一行,应不使用大括号且不换行,例:
for(int i=1;i<=n;i++) cin>>a[i];
组合使用的代码应不换行且以空格可开,例:
a=q.top(); q.pop()

函数

main函数必须声明为int main(/* sth. */),最后一句必须为return 0;,例:

1
2
3
4
int main(void) {
// do something...
return 0;
}

变量声明

应尽量少使用全局变量。
局部变量在需要时定义,除循环以外应尽量减少重名。
如果一个变量更改数值非常频繁,应使用register注册变量,例:
for(register int i=1;i<=999999999;i++)
如果一个变量确定不包含负数,且数值较大,则应使用unsigned无符号类型。

空格

除文章其他地方规定以外,为了便于阅读检查,可在语句中适当添加空格,例:
int a, b, c = a + b*2;

命名

数组与变量应该分行声明。
所有函数、变量、参数名都必须使用“驼峰命名法”,且除辅助变量都必须有意义。
结构体首字母应大写且名称有意义。
例:

1
2
3
4
5
6
7
8
struct Node
{
int a, b;
}

int getRoot(int k) {
// some commands can get root...
}

类型别名、常量类型变量与宏定义

较长的数应使用const而不是#define
较长类型名称应使用typedef而不是#define
当某类型代码大量使用时可以使用#define来缩短代码长度。

例:

1
2
3
4
5
6
7
#define rep(i,s,n) for(int i=s;i<=n;i++)
const int maxn=1000000000;
typedef longlong ll;
ll a[maxn], b[maxn];
ll c, d;

rep(i,1,c) cin>>a[i];

感谢支持,您的支持将是我原创的动力!