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 个字符。

换行原则:

  1. 第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进;
  2. 表达式内部换行时,运算符处于行首;
  3. 参数列表/初始化列表内部换行时,逗号处于行尾。

空格

左花括号的左边有且仅有一个空格。

流程控制关键字和 ( 之间必须有一个空格,函数名和 ( 之间不能有空格。

二元、三元运算符两侧必须有一个空格。例外:,; 的左侧、.->:: 的两侧不能有空格。

一元运算符与操作对象之间不能有空格。

*& 在表示类型时,有“引用”含义的应位于类型名一侧,否则应位于变量、函数、参数名一侧。

int *a = &x;
ostream& operator<<(ostream& os, const V& p) {...}
Node*& c(bool x) {...}

命名

变量、函数、函数的参数、结构体/类的成员、命名空间 使用下划线命名法,也可以使用一个大写字母命名。

结构体/类 使用Pascal命名法

常量 使用全部字母大写,单词间下划线分隔的命名方式。