szTom's Code Style

介绍szTom在C++中使用的代码风格

头文件

必须使用using namespace std;

如果是C头文件,必须使用c前缀文件名。

// 正确
#include <cstdio>
// 错误
#include <stdio.h>

所有#include必须放置于程序开头

预处理

所有的预编译指令(包括 #ifdef 等)不能缩进。

代码不能出现魔鬼数字,必须使用#define

#define声明的宏函数,减少空格的使用。

#endif必须注释其对应的#if

#ifdef ABC
// some code
#endif // ABC

代码

缩进

对于每个代码块,使用与4个空格等长的 Tab 缩进。

花括号

花括号必须不换行,左花括号的左边必须有且仅有一个空格。

如:

if (condition) {

} else {

}

多个意义独立的代码块之间应该用空行隔开。

函数、成员函数、结构体、全局变量块之间必须用空行隔开。

if (condition) {
    // some code
}

for (int i = 1; i <= n; ++i) {
    // some code
}

using namespace std;必须紧跟在 #include 后的空行后,之后必须一个空行。

不应该有两个连续的空行。

for 中的三个语句外,每行不能有超过一个由;隔开的语句。

代码块

由流程控制语句引导的代码块可以省略花括号,但是不能嵌套。

// 正确
if (ok) printf("POSSIBLE
");
else printf("IMPOSSIBLE
");

// 错误
for (int i = 1; i <= n; ++i) 
    for (int j = 1; j <= n; ++j) 
        scanf("%d", a[i] + j);

不能使用逗号表达式。

函数

main 函数的返回值类型必须int不可以省略 return 0;

空函数体可以使用 {}

可以使用lamada表达式。

main 函数必须放置于整个程序末尾。

函数声明修饰符(如inlinetemplate<typename T>)后,必须有一个空格,包括行末。

inline template<typename T> 
T abs(T x) {
    return x >= 0 ? : -x;
}

变量

除用于字符串的char数组外,所有长度大于(5)的数组必须使用全局变量。

空格

逗号 ,for 中的分号 ; 后面必须有一个空格,前面不能有空格。

()[]前后不能有空格。

双目运算符、三目运算符的两侧必须有一个空格。

函数修饰冒号的右侧必须有一个空格,左侧不能有空格, 其他冒号两侧都必须有一个空格。

struct Edge {
    int x;
    Edge(): x(0) {}
}

x >= 0 ? x : -x;

流程控制关键字之后,函数名之后,左圆括号前必须有一个空格。

.->:: 的两边不能有空格。

在算术运算符,位运算付前后必须有一个空格。

在预处理记号后必须有一个空格。

在模板类的实例化时,出现嵌套的,>之间必须有一个空格。

vector<vector<int> > v;

指针与引用

在描述类型名时,指针符号 * 和引用符号 & 与左侧的类型名之间必须有一个空格,与右侧的其它关键字之间不能有空格。

在定义变量、函数返回值、参数时,指针符号 * 和引用符号 & 与左侧的类型名之间必须有一个空格,与右侧的变量、函数、参数名之间不能有空格。

不能取数组某一项的地址,应该计算指针。

// 错误
scanf("%d", &a[i]);
// 正确
scanf("%d", a + i);

杂项

可以使用三目运算符,但不能嵌套。

可以使用switch-case语句,但不能嵌套。

不能使用typedef将自带类型重定义以缩短代码长度。

// 错误写法
typedef long long LL;

在不影响代码逻辑的前提下,使用将自增,自减的运算符放在前面。

++a;

不能使用 int 代替 bool 表示逻辑值。

不能使用 01 代替逻辑值 truefalse

原文地址:https://www.cnblogs.com/szdytom/p/code-style.html