当前位置 : 主页 > 网页制作 > HTTP/TCP >

code-style-oi

来源:互联网 收集:自由互联 发布时间:2021-06-16
0x7FFFFFFF‘s default code code style for OI Inspired by Menci‘s Code Style for OI 缺省源 //Author:0x7FFFFFFF#includecstdio#includecctypetemplate typename tnvoid fead(tn n) { tn f = 1, t = 0, r = 1; char ch = getchar(); while (!isdigi

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 }’

网友评论