闲聊 - 毒瘤码风推荐

闲聊 - 毒瘤码风推荐

用了这个码风,再也不怕代码出BUG了(

前言

相信码风对于我们来说太熟悉了,以至于平常都忘记了它的存在

简介

码风全称代码风格…

我就不啰嗦了,估计也都知道是啥,想看详细介绍可以右转代码风格-百度百科Programming style-Wikipedia

正文

那么就直接推荐自己的码风了

(从来不多打空格的可以跳过这一部分)

1
2
3
4
5
6
7
8
9
10
11
// QuickRead
inline int read() {
int e= 0, f= 1;
char ch= getchar();
while(ch < '0' || ch > '9') {
if(ch == '-') f= -1;
ch= getchar();
}
while(ch >= '0' && ch <= '9') e= e * 10 + ch - '0', ch= getchar();
return e * f;
}

这个空格写法确实毒瘤,估计像我这样的全世界应该有1%…

赋值符前不加空格,赋值符后加空格,运算符和逻辑符前后都加空格,手打不是很方便,习惯就好了.

大括号前不换行加空格,for循环中每个语句只在前加空格


(关于换行等事)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 负载平衡问题
inline int absi(int i) {
return i > 0 ? i : -i;
}
int main() {
cin >> n;
for(int i= 1; i <= n; i++) cin >> a[i], sum+= a[i];
sum/= n;
for(int i= 1; i <= n; i++) a[i]-= sum, s[i]= s[i - 1] + a[i];
sort(s + 1, s + n + 1), k= s[n / 2 + 1];
for(int i= 1; i <= n; i++) ans+= absi(s[i] - k);
cout << ans << endl;
return 0;
}

只遵守一个原则: 一行只存在一个分号, 能一行表示就不要多行表示

但也有例外,较长表达式不会压到一行,比较长的函数定义也不会压到一行

1
2
3
4
5
6
7
8
9
10
11
// 匈牙利算法
int dfs(int nown, int wptr) {
for(int i= head[nown], to; i; i= eds[i].nexty) {
to= eds[i].to;
if(walkpast[to] != wptr) {
walkpast[to]= wptr;
if(!pp[to] || dfs(pp[to], wptr)) return pp[to]= nown, 1;
}
}
return 0;
}

大概就是这种码风,能省略就省略,但一行一条语句。


(判断语句和数组定义)

1
2
3
4
5
6
7
8
9
10
11
12
// 主席树
int main() {
n= read(), m= read();
while(~scanf("%s", o)) {
tmpx= read(), tmpy= read(), tmpxx= read(), tmpyy= read();
if(o[0] == 'L')
tmpc= read(), update(tmpx, tmpy, tmpc), update(tmpx, tmpyy + 1, -tmpc), update(tmpxx + 1, tmpy, -tmpc), update(tmpxx + 1, tmpyy + 1, tmpc);
else
printf("%d\n", query(tmpxx, tmpyy) - query(tmpx - 1, tmpyy) - query(tmpxx, tmpy - 1) + query(tmpx - 1, tmpy - 1));
}
return 0;
}

单行if不会换行,如果存在 else / else if 则换行

1
2
3
4
5
int db[]= {
0, 1, 1799998, 844059434, 446759866, 865662267, 29583524, 127902423, 614370802, 866384115, 771602680, 248905317, 78054944, 297165834, 271692212, 491940959, 329478404, 984412484, 35704862, 729995974, 257611164, 47520158,
......
869867506, 732424548, 678809493, 143987677, 789130682, 973691054, 893883312, 311519914, 650459219, 821045358, 310559620, 775625624, 108543282, 54180205, 287135615, 875178490, 760920242, 512638949, 254323537, 977186041, 474130473, 455558106,
435916613, 787985317, 366892998, 42185197, 192850838, 421591125, 241779127, 969779315, 924599866, 723460313, 430999144};

这个数组定义比较忙=迷,有的时候不会换行有的时候会

工具

如果上面这些格式手动的话…估计考试一道题都做不完…

我目前使用VS Code,他的C++扩展自带格式化工具.clang-format

在 Visual Studio 和 Vim 中也可以用,并且配置文件是通用的

VS Code使用.clang-format: 安装C++扩展 -> 选择工作文件夹 -> 在文件夹下创建文件命名为.clang-format -> 打开编辑

Visual Studio的使用.clang-format: 新建项目 -> 创建.clang-format文件 -> 编辑

.clang-format文件用法

官方文档或者自行百度

常用设置:

SpaceBeforeAssignmentOperator 为赋值符两边的空格

BraceWrapping 为各位置括号前后换行

ColumnLimit 为每行最大字符限制(和数组初始化换行有关)

放一下我的格式化文件配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
---
Language: Cpp
BasedOnStyle: LLVM
AccessModifierOffset: 0
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlinesLeft: true
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: true
BeforeElse: true
IndentBraces: false
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Custom
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false
ColumnLimit: 250
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IndentCaseLabels: true
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: Inner
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: true
SortIncludes: false
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: false
SpaceBeforeParens: Never
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: true
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 4
UseTab: Always
...

最后

用了这个码风,再也不怕代码出BUG了(

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×