LOADING

加载过慢请开启缓存 浏览器默认开启

建议搭配 steam++ 食用更佳

『杂项-OI』码风习惯分享

2023/6/20 杂项 码风

$\text{前言}$

在刷题的过程中 , 我们会见到各式各样的码风 . 当然不乏有些「非主流」( 个人认为 , 不喜勿喷 ) :

比如极为玄学的 $3$ 格缩进 ( 但是我有时候感觉还挺好看的 ( 雾 , 以及看半天看不到一个空格分开语句 / 表达式的「紧凑代码」 , 还有从 $a$ 命名到 $z$ 的「屎山代码」( “屎山” 其实有很多方面 , 只是这点我很不能忍受 ) .

当然 , 码风习惯因人而异 , 自己觉得好看的码风或许在别人眼中十分另类 .

所以我的码风如果有不满意的地方别乱喷 . ( 😖


$\text{头文件}$

以前是用万能头 , 现在的话是要用什么写什么 . 尽量避免命名冲突导致 $CE$ ( $22$ 年 $CSP-S$ 就是因为命名 $CE$ 两道题 , 关键是当时并不知道那玩意是关键字 , $dev$ 滚一边去 ) .

另外 , 在 include 之后会打一个 ' ' . 并且 , 采用 $C++$ 风格头文件 .

$\text{Example :}$

#include <bits/stdc++.h> // 已弃用
#include <iostream>
#include <ctime>
#include <string>

$\text{using 语句}$

直接写 using namespace std , 用自己写的 namespace 时 , 一般写 using 命名空间名::变量/函数/其它 . ( 毕竟用不了那么多 , 要是都用写 namespace 干嘛 ) .

如果 using 能写在 namespace'}' 后面且只需要一句 , 那么就写在这后面 , 细节见下列代码 .

$\text{Example :}$

namespace Rui_Ethereal {
    auto ToDoSomething() { }
} using namespace Rui_Ethereal::ToDoSomething;
namespace Rui_Ethereal {
    const auto SIZE = 114;
    auto ToDoSomething() { }
}
using Rui_Ethereal::SIZE;
using Rui_Ethereal::ToDoSomething;

偶尔用其代替 #definetypedef .


$\text{主函数main}$

signed main() {
    return 0;
    // 有时候不会加返回值 .
}

返回类型用 signed 而不用 int .


$\text{缩进 and 括号风格}$

1 . 采用 $4$ 个空格缩进而不是 TAB .

2 . 能不加大括号就不加大括号 .

if(条件式) DoSomething; // 只有一条语句那么不加大括号
else {
    DoThis;
    DoThat;
    // 不止一条语句
}

3 . 函数写法 :

auto 函数名(参数) -> 返回类型;

有必要的话会写 inline . 空参写 void , 调用时不写 .

缺点 : 有时候忘写返回类型 CE

4 . 函数主体 ( 非 template 部分或者其它 ) 要么写一行 ( 即一条语句 ) , 要么不少于 $4$ 行 ( 包括结束时的 } ) .

template <typename _Tp>
inline auto Max(const _Tp &a,const _Tp &b) -> _Tp { return a < b ? b : a; }
inline auto GetChar(void) -> char {
    if(in_ptr == end_addr) {
        in_ptr = buffer;
        end_addr = ibuffer + fread(buffer,1,CACHE,stdin);
    }
    return in_ptr == end_addr ? EOF : *in_ptr++;
}

5 . 不刻意压行 , 三目除外 , 并且能用三目且比较好写的话就用三目 . ( ?: )

6 . 空格规范 :

特殊写法

( $1$ ) for(auto _((BEGIN));_ <= END;++_)

( $2$ ) for(auto &v : G[u])

( $3$ ) {} 不在同一行 , { 前加空格 . 反之 , { 两边都要加 , } 前加后不加 .

( $4$ ) &&|| 一般用 andor 代替 .

前后都要加空格 :

+ , - , * , / , += , -= , *= , /= , == , != , % , %= 等 .

二进制运算符 & , | , ^ , << , >> , &= , |= , ^= , <<= , >>= .

三目运算符 ? :

不加 :

& ( 作为地址运算符 ) , * ( 指针运算符 )

前后都不加 :

:: ( 作用域解析符 ) , , , ; , . ( 成员 ) , [] ( 下标 ) , -> ( 指针 ) .

大概就这些吧 , 其它的看一下我写的代码就行 .