二级指导:C语言的编程风格
第一:缩进格式
制表符是8个字符,所以缩进也是8个字符。有很多怪异的样式,他们把缩进格式定义为4个字符(设置为2个字符!),这和试图将pi定义为3一样不可接受。
理由:缩进的大小是为了明确定义一个块的开始和结束。尤其是你在电脑前呆了20多个小时之后,你会发现大的缩进格式更容易让你理解程序。
现在有人说用8字缩进让代码靠右,在80字宽的终端屏幕上很难看节目。答案是肯定的,但是当你的程序有超过3个缩进时,你应该修改你的程序。
总之,8个字符的缩进使程序易于阅读,并且还有一个额外的好处,就是当你使程序嵌套层数过多时,它可以警告你。这时,你应该修改你的程序。
第二:大符号的位置。
另一个C编程风格的问题是花括号的处理。不同于缩进大小,几乎没有理由选择一种风格而不是另一种,但有一种推荐的风格,这是kernighan和ritchie的经典著作带来的。它将左花括号
放在行尾,右花括号放在行首,如下所示:
如果(x为真){ we do y }
但是有个特例:命名函数:左括号放在下一行的第一个位置,如下:
int function(int x){函数体}
所有非正统的人都会批评这种不一致,但是,所有头脑正常的人都明白:(1) k&r是_ _ _ for _ _ _的(2)如果k&r是错的,请参考第一条。(:-)) ...况且函数比较特殊,不一定要一致。
注意,右括号在它所占据的行上是空,除了_ _它跟在同一语句的延续符号后面。例如,“while”在do-while循环中,或者“else”在if语句中。如下所示:
do { do-loop的主体} while(条件);
和
if (x = = y) {..} else if (x > y) {...}否则{...}
原因:K&R。
此外,请注意,这种放置花括号的方法减少了空行的数量,但并没有降低可读性。所以,在屏幕尺寸有限的情况下,可以多一些空行来写一些评论。
第三:命名系统
c是一种简洁的语言,命名也应该如此。与module-2和ascal语言不同,C程序员不使用诸如Thisvariableisatemporarycounter这样的命名方法。一个C程序员会把它命名为‘tmp’,很容易写,也没那么难懂。
然而,当混合类型的名字必须出现时,描述性的名字对于全局变量是必要的。调用一个叫做‘foo’global的函数是非常烦人的。全局变量(只有在必要时才使用)像全局函数一样,需要描述性的命名。如果你有一个计算活跃用户数量的函数,你应该这样命名它-'count _ active _
有一种命名方法叫匈牙利语,把函数的类型码写入变量名。这种方法是一种精神错乱的表现——编译器知道这种类型,会去检查,只会把程序员搞糊涂。-知道为什么micro$oft会产生这么多‘bug’程序吗!!。
局部变量的命名应该简短明了。如果你有一个随机整数循环计数器,它可能有“I”。如果不存在被误解的可能性,那么写成‘loop _ counter’就是低效的。类似地,“tmp”可以是具有任何临时值的函数变量。
如果你害怕混淆你的局部变量的名字,还有一个问题,就是叫做
函数-增长-和谐-不平衡综合征。
第四:功能
功能要短小精悍,只做一件事。应该只覆盖一到两个屏幕(80*24屏幕),做一件事,而且做好。
函数的长度与函数的复杂度和缩进大小成反比。所以,如果你已经写了一个简单但是很长的函数,并且你在不同的情况下做了很多小事情,那么你写一个更长的函数也没关系。
但是,如果你要写一个非常复杂的函数,而且你已经估算过,一般人看这个函数的话,可能不知道这个函数在说什么。此时,使用一个有描述性名称的有用函数。
另一件要考虑的事情是局部变量的数量。他们不应该超过5-10,否则你可能会犯错误。重新考虑这个函数,把它们分成更小的函数。人类的大脑通常可以很容易地记住七种不同的东西,超过这个数字就会造成混乱。你知道你很聪明,但你可能仍然想明白你两周前做了什么。
第五次:笔记
评论是好事,但是评论太多也是危险的。不要试图解释你的代码有多好:你应该把你的代码写得更好,而不是花很多时间解释那些糟糕的代码。
通常,你的注释解释你的代码做什么,而不是如何做。而且,尽量避免在函数体中插入注释:如果这个函数真的很复杂,你需要一些注释在里面,你应该回到第4章。你可以写一些简短的评论来指明或警告那些你认为特别聪明(或极其丑陋)的部分,但一定要避免太多。相反,你会的
第六:你已经在里面了。
别担心。你可能被告知‘gun emacs’会自动帮你处理C的源代码格式,你也看到了确实如此。但是,默认情况下,它的功能还是不尽如人意(事实上,它们甚至比你刚刚敲出来的还要丑——无限数量的猴子敲入GNU emacs永远也做不出一个好程序)。
所以,你要么不用gun emacs,要么让它用sanervalules。使用后者,您需要将以下语句输入到您的。emacs文件。(DefunLinux-c-mode ()' c模式,具有调整的缺省值,用于Linux内核。'(交互式)(c模式)(c-set-style ' k & r ')(setqc-basic-offset 8))
这将定义一个m-x linux-c-mode命令。当你黑一个模块的时候,怎么能在前两行输入-*- linux-c -*?这种模式将自动工作。此外,您可能希望添加以下内容
(setq自动模式列表(cons '('/usr/src/linux。*/.*//.『ch』『美元』。linux-c-mode)自动模式列表)
进入你的。emacs文件,这样当您在/usr/src/linux下编辑该文件时,它会自动切换到linux-c-mode。
但是,如果你不能让emaces自动处理文件格式,也不用担心,你还有一个东西:‘缩进’。
gnu的缩进格式也非常死板,这就是为什么你需要添加几行命令选项的原因。不过也不算太差,因为gnu缩进格式的创造者也记住了k&r的权威性(gnu无罪,他们只是在这件事上误导了人),你要做的就是输入选项'-kr -i8 '(意思是' k&r,缩进8个字符)。
“缩进”有很多功能,尤其是当它建议你重新格式化代码的时候。你应该看看帮助。但是记住:‘缩进’并不是拙劣风格程序的灵丹妙药。
0条评论