
一些代码吐槽
奇特的代码集录(持续更新)
虽然这篇分在代码风格教程下面,但实际用于收集我看到过的“神奇”代码。
一、代码风格难以描述
(一)、来自某些课件上的代码
我实名 diss 这种代码。
这代码可以说汇集了一大片我难以忍受的代码风格:
- 左大括号后面加个缩进继续写代码?你是真的嫌自己代码行数太多?那为什么不使用大括号不换行?
这样写不好吗?
你的
main
函数是祖传没有返回值吗?你不知道返回值可以说明程序运行情况吗?好好的一个函数,一个文件,也没有互相调用,为什么要把函数放在
main
函数之下?不声明一下函数并加长代码长度你是浑身上下不舒服吗?return(y);
你是把return
当个函数用吗?return y;
这种常用而美观且少一个字符的写法你是多不喜欢?加注释大家都开心,但可以单行注释为什么偏要块注释?
(二)、来自某些询问我的代码
先说好,这里只是说这些代码不合理,考虑到大多数同学在我提出建议后还是愿意修改的,放在这里主要起一个警示作用。(放心只放代码不写人名)
除了跟上面某代码学来的不好习惯外,还有:
- 缩进消失,代码可读性极差;
scanf
强行规定分隔符,有一定风险。
还有某位同学保持了很久的奇特习惯:除了函数的大括号不换行,其他大括号换行?
行吧,这种还勉强可以接受,但尽量改一下吧。
二、代码神奇写法
(一)、奇特的命名方法
这个命名我印象深刻,所以为啥不用 rest
这种简洁明了的写法呢?
虽然这样使用英文看上去不那么违和,但是 temp
的简称大家也是看得懂的吧,这么长只是加重自己写代码的负担啊。(而且你看 C/C++ 中的 int
不就是简称吗)
count
有和系统关键字重合的风险,所以大家都习惯用 cnt
简称。
同样道理的还有 return
简称 ret
,result
简称 res
。
在 for
内部定义循环控制变量 i
,会让代码看起来更加紧凑,并使得 i
的作用域被限制在整个 for
循环语句内部(包括循环条件和循环体),减小了命名冲突的概率。在以后的编码过程中,我推荐这种写法。
(二)、奇特的写法
第一种:
看上去没啥毛病,除了写成 i<k
更好。
但是实际想法是实现 i=0...n-1
然后除了 i=k
?
发现问题以后,又出现了新的写法:
这个有区别吗?
这样的写法不是很好吗?
第二种:
你可能没有搞清楚判断和循环的区别,而且 continue
和 break
只对最里层循环生效啊。
第三种:
请问这个跟 i++
或者 ++i
的区别是什么?
不写成 a+=b
或者 x/=y
的理由是什么?
虽然如果 y
换成一个复杂的表达式确实写成这样很正常,但这里就一个 y
啊。
第四种:
代码就不放了,太难找了。
大概就是在 oj 上做题,认为比如全部读入完才能开始输出。
同学,输入输出流是两个流啊?你以为评测时的输出是从命令行中截取的吗?输入输出流之间真的基本毫无关系啊。
未完待续。。。
Comments: 3
第一份远古代码xs
应该是K&R C
那个时代不写返回值默认int 而且只有块注释
那个鬼畜缩进似乎也是K&R书上的
然而9102年某课件还这么教怕不是误人子弟…
emmm对这种考古代码完全不了解
这个遇到
i==k
的情况就直接退出循环了吧。