游戏开发论坛

 找回密码
 立即注册
搜索
查看: 19639|回复: 60

小侃一下k&r和ms编程风格

[复制链接]

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
发表于 2006-6-20 00:47:00 | 显示全部楼层 |阅读模式
闲着没事,就把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风格已过时,编程规范应该与时俱进.

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2006-6-20 01:05:00 | 显示全部楼层

Re:小侃一下k&r和ms编程风格

ms稍微好。但是最好的做法,还是c++作者指出的。
在小的范围用简单的命名。
在大的范围用详细的命名。

命名的规则是表意,而不是要描述具体的实现。如int 饭堂人数;而不要 int 整形变量。
从这点上看,ms的匈牙利命名要被淘汰了。

c是推崇简单的命名,匈牙利是复杂的命名。但是都没有结合具体的情况来具体分析。
比如c的类型转换,(type)value 。很简洁。但是c++标准就将它复杂化了。static_cast<type>(value);

这就是说明了,是用简洁,还是详细的格式,要根据具体的情况来定。

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-6-20 01:15:00 | 显示全部楼层

Re:小侃一下k&r和ms编程风格

其实不难发现k&r强调的就是紧凑和简洁,这跟C++的前者C语言当时的风格是一脉相承,而现在C++语法越来越多,发展趋势是越来越不简洁,比如模板,重载,虚函数,强制类型转换等等,看看C++标准里的STL那接口的那副臃肿的样子就知道,它让不少新学者望而却步.所以也有些人提出已经不在乎命名的简洁,那也改变不了C++代码整体的"臃肿".

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2006-6-20 01:45:00 | 显示全部楼层

Re:小侃一下k&r和ms编程风格

我还是推崇详细的命名。
因为宁愿多打几个字,能表达清楚一点还是好的。
何况,ide会帮你添加你要输入的单词,常常不用完整输入。

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-6-20 01:47:00 | 显示全部楼层

Re:小侃一下k&r和ms编程风格

或许有利有弊吧.用复杂的表达清楚,但用简约的看起来也清爽.

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2006-6-21 16:10:00 | 显示全部楼层

Re:小侃一下k&r和ms编程风格

反正现在是两种命名方法结合使用,有些时候让其他人员看得头晕。

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2006-6-21 17:23:00 | 显示全部楼层

Re:小侃一下k&r和ms编程风格

我也是混着用
缩进4格(怎么都想不出为啥缩进8格……难道K&r的人认不出4格?)
而且
}else if
也是我常用的

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
 楼主| 发表于 2006-6-21 20:57:00 | 显示全部楼层

Re: Re:小侃一下k&r和ms编程风格

seer: Re:小侃一下k&r和ms编程风格

我也是混着用
缩进4格(怎么都想不出为啥缩进8格……难道K&r的人认不出4格?)
而且
}else if
也是我常用的


缩进明显不明显取决于字体大小,缩进4格在VC++里比较明显,并不代码在其他编译器明显。请看我上面的代码,在这个网页上面空4格就不明显。

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-6-22 10:31:00 | 显示全部楼层

Re:小侃一下k&r和ms编程风格

我现在把VC的制表符选项改成插入空格了

16

主题

158

帖子

168

积分

注册会员

Rank: 2

积分
168
发表于 2006-6-22 11:08:00 | 显示全部楼层

Re:小侃一下k&r和ms编程风格

很明显ms编程风格好啊,难道各位公司里面不用这种规则吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 20:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表