我的代码观——关于ACM编程风格与librazy网友的对话

  在拙文 《高手看了,感觉惨不忍睹——关于“【ACM】杭电ACM题一直WA求高手看看代码”》中,我对ACMer们的一些代码“惯例”发表了我的看法, librazy网友在评论中给出了他的一些见解,我予以了相应的回复。

  我个人认为这种讨论是极其有益的,双方取得了一些基本共识,对分歧之处,也都说明了自己的理由,以待读者自行判断。无疑,这是一次高水准的讨论。

  感觉这些讨论散见于“评论”中有些可惜,故此稍作整理,以利于网友阅读。需要说明的是,整理过程中我做了一些润色和补充。如果librazy网友感到有必要,欢迎也进行必要的润色和补充。

基本共识

  我和librazy网友一致认为:

竞赛有时是不择手段的;但真正写代码时必须堂堂正正。

  因为竞赛是为了“赢”对手,但代码绝对不是像卫生纸那样一次性使用的。

  此外我和librazy网友都一致认为宏名应该大写,不应该无故违背C语言长期形成的这种“公序良俗”。

  以下则是我和librazy网友对某些问题的“各自表述”:

关于ACM竞赛

librazy:

算法竞赛中,更注重的是代码质量和效率的平衡。

garbageMan:

不能用牺牲代码质量来换取效率,这是得不偿失的短视行为。效率应该通过精心设计的算法获得,而不是通过别的手段,尤其是不能牺牲代码质量。

关于在源文件头部写无用的#include预处理命令

librazy:

一般上ACM开头无论用不用的到,常用的库是一定要引用全的。

garbageMan:

我知道这样写是为了万一遗忘,是有鱼无鱼先撒一网再说的意思,是对自己忙碌的代码没有自信的表示,但这与C的精神是背道而驰的。C的特点之一是简洁甚至至简,,我个人就无法容忍代码中有任何多余的东西,哪怕是一个标点符号。这同样违背了计算机代码本质精神——精确,不多也不少。

关于main()定义是否应该写不需要的形参

librazy网友:

main的风格这两种在ACM中都无所谓……反正编译过了就行。。

garbageMan:

无法容忍理由之一是代码中不应该有多余的东西。此外任何多余的东西都可能导致意料之外的错误而墨菲定律告诉我们任何可能出错的东西一定会出错所以在用不到形参的main()中写参数在我看来就如同阑尾我在这里补充一个有些极端的例子

void swap( int *p , int *q , int *r){int tmp = *p ;* p = * q ;* q = tmp ;}失败是成功的亲娘,没有失败哪来的成功呢?诺贝尔如果不经历千万次的失败,

我的代码观——关于ACM编程风格与librazy网友的对话

相关文章:

你感兴趣的文章:

标签云: