Code Style

新版代码格式标准 (2018-12-7)

  • GNAQ 的 OI 代码风格改进自旧版风格以及 Rust 式代码风格。

预编译指令

顺序:

  • pragma
  • include
  • define
  • undef

缩进

define undef 继承上层缩进,其余不缩进。

T = 4S

写法

include 中全部使用 <> 而非 "" ;

include 中不使用空格。

define undef 中允许被定义的宏全部大写全部小写,其余情况不允许使用大写。

限制

不使用 #if #else #elif #endif #ifdef #ifndef #endif #line #error 以及其他预编译命令。

命名空间

写法

  • 总是使用 using namespace std  导入

using std::cin using std::cout using std::endl using std::min using std::max

在代码出现过的 std namespace 中的函数。

  • 命名空间中可以使用 #define ,但必须在结尾处 #undef

#define 指令应置于命名空间的开头处。

  • 任何大型数据结构使用其大写简写为名称的单独 namespace , 如

namespace KDT namespace SGT namespace TRP

并总是在命名空间的结尾处 } 后缀一分号 ; ,例如:

顺序

应置于代码开头处的所有预编译指令之后。

缩进

继承上层缩进,T = 4S 。

花括号

写法

  • 使用 Allman 式花括号,也即花括号换行。 例如:

  • 在任何代码片段中不使用任何 , 运算符连接两个语句,其正确格式为:

for (;;) { Func1(); Func2(); } 也即一对花括号的每一个前后都有一个空格,语句之间也有一个空格

写法

  • 每行可以有多个语句,但必须使用一个空格隔开。
  • 多个意义独立的代码块之间应用一个空行隔开 ;
  • 非空行尾不应有多余的空格 ;
  • using namespace std; 后有一空行 ;
  • 函数、成员函数、结构体、全局变量块之间必须用空行隔开。
  • if for while 等语句,若其后只有一条语句 (或嵌套) ,可以直接缩进 (T = 4S) 而无需 {} 。

缩进

继承上层缩进 , T = 4S 。

小括号

写法

声明及调用函数时的括号紧跟其他字符外,任何成对小括号的前后必须有一个空格隔开其他字符,如:

for (;;) Func1();

if (case1) { .. }

int i = (j * 100 + log2(100) );

( 若 ) 后接的是 ; 则空格可以省略 )

指针与引用

写法

  • OI 代码中不使用指针。
  • 引用部分采用 Rust 式命名,任何引用前的标识符 & 和引用变量之间用一个空格隔开,若前有类型标识符,则引用标识符紧跟类型标识符,如

缩进

继承上层缩进 , T = 4S 。

函数

写法

  • 函数采用大驼峰命名法,选择性地加入 _ ,如:

void Update()  int Qry() Mat Gauss_Elimination()

  • 空函数体必须为以下格式:

void Func1() {}

缩进

继承上层缩进 , T = 4S 。

空格

写法

  • 逗号后必须有一空格。前面不能有空格。
  • 冒号的两侧必须有一空格。
  • 双目、三目运算符两侧必须有一空格。
  • ++ -- 前/后不需空格。
  • 若非 C++1x ,则形如 vector< pair<int, int> > 的声明,每对 <> 前后空格需要对称。
  • :: . 的两侧不应有空格。
  • 初始化列表前后不需空格,如 max({a, b, c});

缩进

继承上层缩进 , T=4S 。

注释

缩进

继承上层缩进 , T=4S 。

写法

单行注释使用 // ,之后应有一空格,如 // do something 。

多行注释使用 /**/ ,其中 /* 和 */ 应独占一行,且 /* 和 */ 后应有一空行,例如:

 

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据