0x7FFFFFFF‘s default code & code style for OI
Inspired by Menci‘s Code Style for OI
缺省源
//Author:0x7FFFFFFF #include<cstdio> #include<cctype> template <typename tn>void fead(tn &n) { tn f = 1, t = 0, r = 1; char ch = getchar(); while (!isdigit(ch)) {if (ch == '-') f = -1; ch = getchar();} while (isdigit(ch)) t = t * 10 + ch - '0', ch = getchar(); if (ch == '.') {ch = getchar(); while (isdigit(ch)) r *= 10, t += (ch - '0') / r, ch = getchar();} n = f * t; } int main() { //freopen(".in","r",stdin); //freopen(".out","w",stdout); return 0; }
PS:其中fead()读入优化函数为了节省行数而压行,大家不要在意.
概览
所有的 #include 指令必须放置于整个程序开头。
不应该使用 using namespace std;。
若有必要可以using foo::bar;
main 函数应该放置于整个程序末尾。
不应该使用 int 代替 bool 表示逻辑值。
比起++i使用i++(gcc/g++编译之后两者速度几乎无差异)
预编译指令
#include 中,C 标准库头文件必须使用 c 前缀,而不是 .h 后缀。
#include 中,C 标准库头文件应该放置于 C++ 标准库头文件前,其它头文件(如果有)应放置于最后。
所有的预编译指令(包括 #ifdef 等)不能缩进
缩进
对于每个代码块,使用长度为4的 Tab 缩进。
花括号
个人认可Java式的花括号匹配,既左大括号不换号。在catch和else前换行。
例:
try { foo(); } catch () { } void foo() { bar(); } void fun() { bar(); } class foo { }; if (foo()) { } else { } enum X : int { A, B };
函数
main 函数的返回值类型必须是 int,不可以省略 return 0;。
空函数体可以使用 {}。
传参时,应该根据实际需要使用「引用」、「const 引用」和「值传递」。
空格
需要加空格的地方:
- 二元运算符(包括赋值运算符)两侧(,运算符例外,见下);
- ,及;的右边(如果其不处于行尾);
- if, for等控制流关键字与其后的左括号之间 ;
- do-while中的while、if-else中的else与其前面的右大括号之间;
- 所有左大括号的左侧(根据不换行的策略,左大括号不应处于行首);
- ? :的两侧(包括构造函数初始化列表中的:);
- 类型中,&的左侧(如:const int &a, int A(int &a)。);
- 常成员函数的const两侧。
- ->的两侧
一定不能加空格的地方:
- 小括号及中括号与其内部的表达式/参数列表之间;
- 函数名与左括号之间(包括声明/定义/使用);
- 单目运算符(!,-,*,&,~)之后(或自增自减运算符与其操作数之间);
- ,及;的左侧;
- 类型中*,&的右侧;
- .,::的两侧;I
- operator与所要重载的运算符之间(运算符与参数列表之间,根据第2条,也不应空格)。
参数列表/初始化列表过长时内部也可换行,逗号处于行尾;tabs对齐。
极短的函数可以写到一行
指针与引用
在描述类型名时,指针符号 * 和引用符号 & 与左侧的类型名之间必须有一个空格,与右侧的其它关键字之间不能有空格,如 char const 或 int &。
在定义变量、函数返回值、参数时,指针符号 * 和引用符号 & 与左侧的类型名之间必须有一个空格,与右侧的变量、函数、参数名之间不能有空格。
命名
所有结构体、函数、变量、参数名必须使用下划线命名法。
为方便,命名中的单词可以使用缩写,函数、变量、参数名可以用一个小写字母代替,常量可以大写字母命名,如N, M。
int a_var_with_very_long_name; struct Node{ int dep, s; }; struct SegT{ SegT *lc, *rc; }; bool get_ans(std::vector<std::string> &res);
其他
写着好看就行
格式化软件选项
Astyle:--style=java --indent=tabs=4 --pad-oper --delete-empty-lines
Clang Format:-style=‘{ BasedOnStyle: LLVM, UseTab: Always, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Attach, AllowShortIfStatementsOnASingleLine: true, IndentCaseLabels: true, ColumnLimit: 0 }’