IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    OI中常用的代码规范

    ReiAC\'s Blog发表于 2018-07-14 15:41:29
    love 0

    本文介绍本人在 OI 中常用的代码规范

    概览

    所有的 #include 指令必须放置于整个程序开头 在.cpp文件中使用 using namespace std; main 函数应该放置于整个程序末尾 不应该使用 int 代替 bool 表示逻辑值

    预编译指令

    #include 中,C 标准库头文件必须使用 c 前缀,而不是 .h 后缀 #include 中,C 标准库头文件应该放置于 C++ 标准库头文件前,其它头文件(如果有)应放置于最后 所有的预编译指令(包括 #ifdef 等)不能缩进

    缩进

    对于每个代码块,使用 4 空格或等长的Tab转空格(可以尝试Code::Blocks的默认自动缩进)

    花括号

    花括号必须遵循以下两种写法之一,前一种被称为「花括号不换行」,后一种被称为「花括号换行」
    对于「花括号不换行」,左花括号的左边必须有且仅有一个空格
    对于「花括号换行」,左花括号必须与上一级代码块的缩进相同
    所有右花括号必须与上一级代码块的缩进相同

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    
    //不换行写法(邪教!)
    if (condition) {
        something;
    } else {
        something;
    }
      
    //换行写法(正义!)
    if (condition)
    {
        something;
    }
    else
    {
        somethng;
    }
    

    行

    除 for 中的三个语句外,每行不能有超过一个语句如果需要一行内求值多个表达式,可以但减少使用等效的逗号表达式替代 多个意义独立的代码块之间应该用空行隔开 右花括号前不应该有多余的空行

    不应该有两个连续的空行 非空行尾不应该有多余的空格 所有的 #include 指令之后必须有一个空行 如果有 using namespace std;,则必须紧跟在 #include 后的空行后,之后必须一个空行 函数、成员函数、结构体、全局变量块之间必须用空行隔开

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    
    #include<cstdio>
    #include<iostream>
      
    const int MAXN=100;
    const int MAXM=200;
      
    int n,m,a[MAXN+1];
    double p,q,x,y;
      
    int main()
    {
        p=1,q=2;
        return 0;
    }
    

    函数

    main 函数的返回值类型必须是 int,不可以省略 return 0; 空函数体可以使用 {} 传参时,应该根据实际需要使用「引用」、「const 引用」和「值传递」

    变量

    在不影响代码可读性的前提下减少变量 局部变量必须在用时定义,变量名不应该与上一个块中的变量重名,可以与全局变量重名 只在一个函数内使用到的需要全局空间(如大数组)或生命周期的变量,必须定义为 static 的局部变量

    空格

    在不影响代码可读性的前提下减少空格 || 或 &&之类多条件并列的运算符左右必须要空格 = + - . -> ::之类两边不加空格 语句末尾打死不加空格(除非写Markdown)

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    
    if(条件1 && 条件2)
    {
        f[i][j]=f[f[i][j-1]][j-1];
    }
      
    struct Edge
    {
        int x;
        Edge():x(0){}
    }
    

    指针与引用

    在描述类型名时,指针符号 * 和引用符号 & 与左侧的类型名之间必须有一个空格,与右侧的其它关键字之间不能有空格,如 char *const 或 int *& 在定义变量、函数返回值、参数时,指针符号 * 和引用符号 & 与左侧的类型名之间必须有一个空格,与右侧的变量、函数、参数名之间不能有空格

    命名

    所有结构体、函数、变量、参数名必须使用驼峰命名法,其中结构体名首字母必须大写,其它首字母必须小写 为方便,命名中的单词可以使用缩写,函数、变量、参数名可以用一个小写字母代替全局数组可以命名为一个大写字母

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    
    int aVarWithVeryLongName;
      
    struct Node
    {
        int dep,s;
    }
      
    struct SegT
    {
        SegT *lc,*rc;
    }
      
    bool getAns(std::vector<std::string> &res);
    

    模板来自menci的博客



沪ICP备19023445号-2号
友情链接