C++编程风格 如何编写好的C++代码

西昆仑 发布于 2012/05/23 14:29
阅读 3K+
收藏 4

先说明一下发这个贴的由来:

我是一名学生, 在学校的实验室参与导师们的课题以及项目。也编写了不少的程序,C++,JAVA的。但是现在在看自己的代码。觉得编码风格很不好,变量命名、注释、类属性命名,函数命名,包括文件的命名等。看一些大师的书,他们的代码的排版,注释,逻辑,是那么的让人赏心悦目。

所以想问问大家,你们在自己工作中,是怎样的一种编程习惯和编程风格呢。

先上几个自己的:

类定义:

class QueueInfo
{
public:
	string m_strQueueName;	//消息队列名
	string m_strQueueOwner;	//拥有者
	QStorage* m_pQStorage;	//消息队列仓库
	//......
}

在命名类时,我不喜欢在前面加个C,MFC就喜欢干这个。
在定义类属性成员时,一般用m_***。其中要包含一些类型信息。比如字符串的话会用m_str***,指针类型用m_p***.

普通变量命令

比如整数,int nDataLen; //数据长度
字符数组char szName[10];

函数定义:

 ErrCode  QCommunication::SendAsyncData(char* pSendDataBuf, int nDataLen,
 byte msgType) throw(SocketException)
{
//.........
};

 

对函数的注释:

  /************************************************************************
 函数名:SendAsyncData
 功能:发送异步消息
 参数:[in] pSendDataBuf    发送缓冲区指针
      [in] nDataLen	   接收到的数据长度
      [out] msgType	   消息类型
 返回值:操作的错误编码
 /************************************************************************/

就不一一列举了啊。我常常遇到这些问题:

1. 该给变量起什么名字,常常想不到一个好的名字;如果用对应的物理意义的英文,有时会嫌太长;
2. 变量前面如果带类型前缀,有时会不知道用什么前缀,比如我是STL。
3. 对注释的控制。大家都知道不要写无用的注释,自己也会注意,但是回头看时,注释的编写总是让自己不满意。
3. 代码的排版。
4. 函数的长度,这个是我一直在控制的东西,在我自己编写的代码中,自己控制自己的单个函数不超过200行,以前维护别人的代码,一个函数写了N长,光IF嵌套就让人看晕了,无法维护。

大家也来谈谈吧。

加载中
0
Jackarain
Jackarain

建议1: 不要使用匈牙利命名法(即:变量命名不带类型),  匈牙利命名是相当丑陋, 在变量名加上类型信息是冗余的. 甚至在ms新推出的.net也不再推荐匈牙利命名了. (可悲的是国内清一色的MFC程序员, 动手就strXXX, nXXX, CXyzm...), 建议使用linux内核编码风格 或 K&R, 由其作为一名热爱开源的码农, 更应该弃掘匈牙利命名法...

建议2: 不要大小写混用, 大小写混用的代码, 看久了容易视觉疲劳或眼花, 推荐使用下划线分隔.

BTW: 有时候从一个人的程序命名方式, 也能从侧面看出那个人的水平(不一定完全, 只是相对的).

 

哒不溜滴滴
哒不溜滴滴
我认为匈牙利命名法在C++上无可厚非,一般的C++IDE或者Editor没有很好的静态检查能力,匈牙利命名法可以让程序员少犯错
寂寞沙洲
寂寞沙洲
google C++编码规范
Jackarain
Jackarain
回复 @西昆仑 : 互相交流嘛, 不必客气呀.
西昆仑
西昆仑
我们从接触编程就是从VC开始,在以前的师兄师姐们继承过来的代码也是如此的风格,慢慢养成的习惯,最近在看代码简洁之道,产生了很多想法,也很想知道其他人是怎么做的。所以才会发这个帖子啊。谢谢你的回答~
0
ChenQi
ChenQi

有本书就叫《C++编程风格》(C++ programming style).

还有一篇论文叫做coding style

你不如去看看大师们怎么说的。

0
中山野鬼
中山野鬼
其他不知道,但有点肯定,杜绝使用C风格进行代码设计。不然等你工程大了,自己看的都蛋疼。C和C++编程是完全两个概念。千万别听信C++可以完全包裹C语言的话,最后你会明白,该C的还是用C写,该C++的还是C++。
中山野鬼
中山野鬼
回复 @西昆仑 : 不同的项目特点导致项目在规模化后关注的对象不一样,一种是模块化的对象一种是层次化的对象,这个直接导致你使用C还是C++更方便。例如os,即便上规模了,还是模块化的,它本身是个底层的东西,但是很多APP就不同。需要层次化,让应用设计者和底层隔离。
Jackarain
Jackarain
回复 @西昆仑 : 命名方式和语言无关, 就比如匈牙利命名还可以在pascal中使用, C#中等等语言中.
西昆仑
西昆仑
还有,你说工程变大之后,不同的风格会导致对项目不同的驾驭能力,这个如何理解?
西昆仑
西昆仑
C风格,C++风格,这有区别吗?我写C,C++同一种风格~
0
周翼翼
周翼翼

风格只要统一,就好.

楼上建议不用匈牙利命名法,我倒认为匈牙利可以容易看出变量的类型,工程大或者不用智能IDE的时候就看出好处.如果小项目,或者用现代的IDE,大可不必用匈牙利.

周翼翼
周翼翼
回复 @Jack.arain : ~~,自己写,当然是自己定,这个也不用讨论.~~
Jackarain
Jackarain
回复 @周翼翼 : 我说的是你自己的代码, 你可以试试不写匈牙利风格的代码. 为公司写或者参与别人的项目, 就得遵守项目原来的编码风格, 这一点不用讨论.
周翼翼
周翼翼
回复 @Jack.arain : 基本理解.是你不理解我说的.我说的是,在公司写c代码,风格不是你个人说了算的,是项目组早就定好的,或者项目原有代码写好的.
Jackarain
Jackarain
回复 @周翼翼 : 你没理解我说的, 我也不解释了.
周翼翼
周翼翼
回复 @Jack.arain : ~~,大项目.风格都是前面定好的.要和现有的代码风格统一.
下一页
0
zcj
zcj

顶楼上,风格统一就好,以前很喜欢匈牙利命名法,但自从玩了Linux以后都用下划线了。

推荐楼主读一下林锐博士写的《高质量 C++/C 编程指南》,我们C++老师推荐的,才100页,写的很不错。当然如果有时间能看下《代码大全》最好,据说光变量命名就讲了50多页,我准备抽时间看一下。

中山野鬼
中山野鬼
回复 @西昆仑 : 代码好不好,看两个方面,1、是否可以解决问题,2、复用率是否高。无论是面向对象还是面向模块,都存在这两个指标。
西昆仑
西昆仑
恩,最近在反思一些问题,也在看代码简洁之道,旁边的桌上还放着一本代码大全,哈哈。确实要养成一个好的编程风格。我现在看我自己的代码都觉得写得不好。
zcj
zcj
回复 @周翼翼 : 应该是非完全版的。我是大二时看过,以后就再也没看了,原来还有完全版的。
周翼翼
周翼翼
你看的是非完全版的吧.完全的有450多页的.
0
bastetwang
bastetwang

http://wenku.baidu.com/view/d978970316fc700abb68fc41.html

推荐这个,这里面提到这个命名规范的

ChenQi
ChenQi
好东西
0
bastetwang
bastetwang

http://ishare.iask.sina.com.cn/f/19210212.html

这是中文版的。

0
汉克斯
汉克斯

引用来自“zcj”的答案

顶楼上,风格统一就好,以前很喜欢匈牙利命名法,但自从玩了Linux以后都用下划线了。

推荐楼主读一下林锐博士写的《高质量 C++/C 编程指南》,我们C++老师推荐的,才100页,写的很不错。当然如果有时间能看下《代码大全》最好,据说光变量命名就讲了50多页,我准备抽时间看一下。

别听楼上几个忽悠,我的建议是,如果你在小公司混,只要代码自己看懂就行(你懂的 ),如果你在大公司混,这个没选择的余地,一切按公司规范来。
汉克斯
汉克斯
回复 @周翼翼 : 真了,在小公司,不管怎样一般都裁不到你头上。^_^
周翼翼
周翼翼
~~,要自己看得懂,还是要风格统一,否则你还是会想自杀.
0
Lunar_Lin
Lunar_Lin

好像楼主关心的是命名,这个问题其实不大. 甚至可以说没太大意义. 有点书呆子的味道
1. 命名时类型完全可以不用标明了,现在的编辑器都很强大,已经不是一个时代了.
2. 类名现在很少见到加C的了,主要是工程越来越复杂, 加C弄得复杂的命名更加别扭.
3. 成员变量有3种方式 楼主自己选: m_前缀(多数C++项目,老C++项目),   _前缀(某些C++项目),  后缀_(google风格, 开源项目,新兴的C++项目).   以及方法参数变量喜欢加个 _前缀与无前缀的局部变量区分.(这个STL风格)

注释 个人建议多加, 但别太多,好几行.除非介绍代码原理.
函数行数这个自己控制, 个人觉得只要是一个逻辑块的 就保留在一起. 哪怕长的可怕.

0
xyz555
xyz555

编码风格为的是使得程序更方便阅读,而不是为了好看,呵呵。

linux内核编码风格

Google编码风格

匈牙利命名法也不是不能用。

也可以参考其他成熟的编码风格形成自己的风格。因为确实没有一种代码风格能让所有人满意。

返回顶部
顶部