Inspired by Menci’s Code Sytle for OI _rqy’s Code Style for OI
本文介绍 qdd 在 算法竞赛 中常用的 C++ 代码规范。
不适用于工程代码。
概述
所有的 #include
指令 必须 放置于整个程序开头。
可以使用 <bits/stdc++.h>
。
可以使用 using namespace std;
。
main
函数返回值必须为 int
, return 0
不可忽略。
预编译
#include
中,C 标准库头文件使用 c
前缀,而不是 .h
后缀。
尽量不要使用 #define
而使用 const
, using
, typedef
, inline
。
缩进
每个代码块采用 2 或 4 空格缩进,不允许使用 tab 字符。
所有的预编译指令(包括 #ifdef
等)不能缩进。
行
花括号不换行。
除 for
中的三个语句外,每行不能有超过一个语句。
函数、成员函数、结构体、全局变量块之间必须用空行隔开(一系列短小到可以写到一行的函数,如 dot
, det
,之间可以不空行)。
在流程控制语句中,即使只有一行,也不能省略块 {…} 。
每行不能超过 120 个字符。
换行原则:
- 第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进;
- 表达式内部换行时,运算符处于行首;
- 参数列表/初始化列表内部换行时,逗号处于行尾。
空格
左花括号的左边有且仅有一个空格。
流程控制关键字和 (
之间必须有一个空格,函数名和 (
之间不能有空格。
二元、三元运算符两侧必须有一个空格。例外:,
及 ;
的左侧、.
、->
、::
的两侧不能有空格。
一元运算符与操作对象之间不能有空格。
*
和 &
在表示类型时,有“引用”含义的应位于类型名一侧,否则应位于变量、函数、参数名一侧。
int *a = &x;
ostream& operator<<(ostream& os, const V& p) {...}
Node*& c(bool x) {...}
命名
变量、函数、函数的参数、结构体/类的成员、命名空间 使用下划线命名法,也可以使用一个大写字母命名。
结构体/类 使用Pascal命名法。
常量 使用全部字母大写,单词间下划线分隔的命名方式。