闲着没事,就把k&r风格和ms风格的大致区别出来写一写,现在列出来: (1)书写结构: k&r风格: 缩进一个水平制符,k&r提倡8格.左花括号紧接其后不另起一行(函数体的左括号除外). if(...) { ...; ...; } else if(...) { ...; ...; } else { ...; ...; } while(...) { ...; ...; } do { ...; ...; }while(...); for(...;...;...) { ...; ...; } typedef { ...; ...; ...; }abc; class abc { ...; ...; ...; }; ms vc++风格: 缩进一个水平制符,vc的水平制符相当4个空格. if(...) { ...; ...; } else if(...) { ...; ...; } else { ...; ...; } while(...) { ...; ...; } do { ...; ...; }while(...); typedef { ...; ...; ...; }abc; class abc { ...; ...; ...; }; 坚持k&r风格的开发人员认为将左花括号单独占一行浪费了行数,使代码稀疏不够紧凑.只要右花括跟条件控制关键字if,while,do,for等并列即已很清晰.缩进制表符相当于8个空格,这样层次清晰,4格不够清晰. 坚持ms风格的开发人员认为左花括号紧接其后不另起一行而函数体的左括号却另起一行,是一种怪异的不一致性.缩进8格太多,缩进层次多了会使一些代码跑出屏幕. (2)命名法 k&r风格: 讲究简短清爽.单词一致使用小写;一个单词超过8个字符的使用缩写;一个名字中包含多个单词则用下划线隔开它们. BOOL empty; int num_element; void get_element(); class stack; class seq_stack; struct student; object obj; dialog dlg; int object::cls_id; int tmp; int i, j; ms风格: 讲究表意明确.使用匈牙利法给名字加类型前缀;每个单词第一个字母以大写开头;相对前者更容易冗长,也有少部分地方借鉴于k&r风格. BOOL bIsEmpty; int dwNumberOfElements; void GetElement(); class IStack; class CSequenceStack; struct SStudentInfo; CBaseObject cBaseObject; CBaseDialog cBaseDialog; int CBaseObject::m_dwClassID; //也有少部分借鉴于k&r的简约风格 int tmp; int i, j; 坚持ms风格的人认为k&r风格的变量,结构和很多标识符出现在一起时,有时人会分不清标识符是函数内的成员还是普通变量,或者不知道变量,结构还是类. 坚持k&r风格的人认为微软的所谓"表意明确"和匈牙利类型命名法是纯粹自找脑损伤的表现.好的名字本来就不应该让程序员看不懂是什么类型.又何尝要加匈牙利类型前缀,并讽刺匈牙利类型前缀是写给编译器看的. (3)总结 k&r风格,历史悠久,而且有众多友好的开源兄弟,如linux内核风格,gnu编码规范,它们都跟k&r基本相同.如果要写开源代码,使用k&r可能会更受人欢迎.不少坚持k&r风格的开发人员认为k&r风格是老字号,是C语言发明人提出国际标准化组织制定的风格.因此一些开发者认为ms风格不够正统. ms风格是这几年推向MS外部开发人员的后起之秀,凭着微软的软件巨无霸的实力,迅速风靡开来.随着Visual C++,MFC在开发市场推广和普及,越来越多的开发人员逐渐接受了ms风格.不少坚持ms风格的开发人员认为k&r风格已过时,编程规范应该与时俱进. |