Mr Loser

如何压行更美观(详细揭秘)

2020-08-08 14:04:21


前言

众所周知,压行这种不要钱的乐趣,压了还方便调试,不压白不压。

压行的好处

压行主要有如下几点好处:

  1. 适当的压行可以使代码更整齐、美观
  2. 可以方便调试(比如加断点,不压行要翻很久,压了行一眼就能看到)
  3. 可以装x

压行的正确操作?

正确使用逗号运算符

如果很多条语句压成一行,中间却用分号隔开,那么显然是不美观的。比如下面的代码:

x^=y;y^=x;x^=y;

强迫症看了要跳楼,普通人看了也要被逼死。

关键是分号打起来也不方便......

于是我们把中间的分号省去。

x^=y,y^=x,x^=y;

这样就美观多了。

避免不必要的空格

为了让每一行能容纳更多的语句,打太多的空格显然是不好的。

比如下面的语句:

int t = a; a = b, b = t;

看上去很长,其实去掉不必要的空格就这么一点点:

int t=a;a=b,b=t;

缩短了几乎三分之一。

所以以下空格尽量删去:

  1. 括号内外的空格
  2. 运算符边、分号边的空格
  3. 重复的空格

适当使用宏定义

很多语句在程序中多次出现,但是很短,没必要写个函数。这时候用宏定义就成了最佳选择。

比如 u->son[k] 在程序中大量出现,显然影响了美观度,于是考虑定义个宏 s(u,k) 来代表它,这样可以提高代码美观度,顺便缩短长度。

为了使代码更美观,建议将宏定义集中写。

对于函数

很多函数其实可以压成一行,比如:

inline int max(int x,int y){
    return x<y?y:x;
}

可以压成

inline int max(int x,int y){return x<y?y:x;}

这样可以大大缩短代码行数。

但是很多容易出错、码量大的就不建议压成一行。

对于大括号

大括号可以和其它的语句写在一行。

比如:

if(...){
    ...
}
else{
    ...
}

可以压成

if(...){
    ...
}else{
    ...
}

如果可以的话,还可以压成

if(...){...}else{...}

但是不提倡这么压:

if(...){
    if(...){
        ...
    }}

因为这样使同一对大括号的缩进级别不同,大大降低了代码的美观度。

保留缩进

这个不用说了。

尽量不要拆分语句

这个更不用说了。

如果不得不拆分的,建议让拆分后的两条语句对齐。

控制每行最大字数、平均字数

个人建议,一般每行最大字数控制在 $130$ 以内,平均字数和最大字数的差控制在 $50$ 以内。