关于C/C++程序的一些规范(2005-5-10)
工作了一段时间
最有感触的就是程序的规范问题
下面就列出一些在写C/C++程序时要注意的几个方面
并列出示例语句
1、 h头文件要防止重复包含
处理办法,使用#ifndef...#define....#endif
示例
// Calculator.h : 头文件
//
#ifndef CALCULATOR_H_2005_04_27__
#define CALCULATOR_H_2005_04_27__
................
#endif
2、命名
命名应当能体现出性质,如在类定义前面加C,在int型变量前加i,在double型变量前加db,在CSting型变量前加cs,在char型变量前加ch,等等等等,对于类的私有成员,应加m_以区别,对于用作循环计数器的整型变量i,j不加前缀
在定义一个常规变量的时候,应当赋初值,对于类的数据成员,应当尽可能在构造函数里初始化,
示例
private:
STACK_DOUBLE m_doubleStack; //操作数栈
STACK_CHAR m_charStack; //操作符号栈
static char m_priTable[8][8]; //运算符优先级列表
int i = 0;
int j = 0;
int iLength = 0;
int& alia_i = i;
char chMyOperator = '\0';
char chCompareResult = '\0';
char chCurrent = '\0';
char chTop = '\0';
double dbNumber1 = 0.0;
double dbNumber2 = 0.0;
double dbResult = 0.0;
double dbCurrentNumber = 0.0;
3、关于返回值
在规范中,除了没有返回值的函数(如构造函数),其他的,必须要有返回值,不能使用void
即使不需要任何返回值,建议返回int值 1,表示运算正确
int CCalculator::ReturnError(CString csExp)
{
return 1;
};
4、关于过程的括号
所有的过程,必须要有括号
比如
像
if ( i > 0)
i++;
这样的语句应当写成
if ( i > 0 )
{
i++;
}
5、关于过程可有可无的语句,尽量写完整
比如
像
switch ( i )
{
case 0:
return 1;
case 1:
return 1;
}
应当写成
switch ( i )
{
case 0:
return 1;
break;
case 1:
return 1;
break;
default :
return 0;
break;
}
6、关于和常量比较的问题
像
if ( i ==0 )
{
i++;
}
最好写成
if ( 0 == i )
{
i++;
}
一方面能更清楚的看到比较的值
一方面可以防止把“==”误写成“=”,这时候编译会报错
而 if ( i = 0 ) 也误写了,却不会报错
7、关于注释
写注释现在发现,对于程序的可读性和重用性都是很必要的
不过,乖狗狗以前是不写注释的
(1)关于注释的符号
C/C++ 中两种注释符号
一是“//” 进行行注释,二是“/* */ ”进行过程过释
这两种各有好处
从编译性能上来说“//”性能更好,因为直接忽略了该符号以后的字符,而碰到“/*”的时候,编译器要查找跟它匹配的“*/”,这就牺牲了性能
“/* */ ”的优点是它可以嵌套,而且对较长段落进行注释的时候比较方便
(2)关于注释的位置
对于成员注释,应当在变量后面或者是下一行进行注释
如
STACK_DOUBLE m_doubleStack; //操作数栈
STACK_CHAR m_charStack; //操作符号栈
对于成员函数,应当在函数的上方进行注释
//对不合法的表达式,找到错误,通知用户修改
int CCalculator::ReturnError(CString csExp)
{
return 1;
};
对于过程,应当在过程有结构和逻辑意义的地方进行注释
如
switch (chCompareResult)
//根据比较结果执行不同的操作
{
case '>' :
//当前操作符优先级较高,压入操作符号栈
m_charStack.push(chCurrent);
i++;
break;
case '<' :
//当前操作符优先级较小,计算前面的运算结果
chMyOperator = m_charStack.top();
m_charStack.pop();
dbNumber2 = m_doubleStack.top();
m_doubleStack.pop();
dbNumber1 = m_doubleStack.top();
m_doubleStack.pop();
dbResult = Count(dbNumber1, dbNumber2, chMyOperator);
m_doubleStack.push(dbResult);
break;
case '=' :
//当前操作符与栈顶操作符优先级相同,有两种可能
if (chCurrent==')')
//如果为左右括号相遇,脱括号
{
m_charStack.pop();
i++;
break;
}//end if
else
//如果为两个'#'相遇,运算结束
{
if (chCurrent=='#')
{
dbResult = m_doubleStack.top();
return dbResult;
break;
}//end if
}//end else
case 'E' :
//比较出错
break;
default:
break;
}//end switch
(未完待续)
亲爱的朋友,阅读完本贴之后,请不要吝啬您的评论,无论赞扬或是批评,我都会深深地感谢您!
关于C/C++程序的一些规范(2005-5-10)相关推荐
- 微信小程序页面上面的名字怎么改_微信小程序改名方法,小程序名称设置规范...
小程序名称设置规范 1.名称设置方法 1)小程序名称可以由中文.数字.英文.长度在4-30个字符之间,一个中文字等于2个字符. 2)公众号.小程序在微信公众平台上的名称是唯一的,且属于同一主体下,可以 ...
- C语言 程序代码编写规范
前言 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性. 说明 l 本文档主要适用于刚刚开始接 ...
- c语言程序前言,C语言 程序代码编写规范前言
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性 ...
- c语言程序报告的前言,C语言 程序代码编写规范前言
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性 ...
- 小程序开发运营必看:微信小程序平台运营规范
一.原则及相关说明 微信最核心的价值,就是连接--提供一对一.一对多和多对多的连接方式,从而实现人与人.人与智能终端.人与社交化娱乐.人与硬件设备的连接,同时连接服务.资讯.商业. 微信团队一 ...
- 开发运营必看,跳出雷区必须知道的微信小程序平台运营规范
一.原则及相关说明 微信最核心的价值,就是连接--提供一对一.一对多和多对多的连接方式,从而实现人与人.人与智能终端.人与社交化娱乐.人与硬件设备的连接,同时连接服务.资讯.商业. 微信团队一 ...
- 2005年10月--至今 开发过的项目
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! ==== ...
- 2005年10月--至今,开发过的项目
=====武汉智远科技有限公司============================================ 1.2005 年10月 -2006年 2月 << 面向用户的网络性能 ...
- 【Microsoft Azure 的1024种玩法】二十四.通过Azure Front Door 的 Web 应用程序防火墙来对 OWASP TOP 10 威胁进行防御
[简介] 我们都知道像 SQL 注入.跨站点脚本攻击(XSS)之类的恶意攻击以及 OWASP 发现的十大威胁都可能会导致服务中断或数据丢失,让 Web 应用程序所有者受到巨大威胁.那么如何有效的解决O ...
- 程序员初入公司:10大经验让你能力提升20倍!
IT企业普遍有个特点,"把女人当男人用,把男人当**(此处略去2个字)用." 有句俗话说,"男怕入错行",我想这句话其实也同样适用IT女生. 我们可以做个小测试 ...
最新文章
- 工具用的好下班走的早
- linux 串口控制read()的说明
- SQL注入法攻击一日通
- 找出占用cpu最高的线程
- 不怕贼偷,就怕贼惦记!
- Mac Big Sur如何更改锁屏时间
- 物联网核心安全系列——智能监控安全问题
- SOP 中的 Service
- EF的注解Annotation和Fluent API
- java 缓存日志_Java日志缓存机制的实现(3)
- 小施同学的投资日记 开篇
- rancher k8s docker 关系_CentOS7下利用Rancher搭建K8s集群
- paip.mysql error2003 Can''t connect to MySQL server on localhost (10061)的解决
- 翻译:swift 5通过使用泛型进行高级异步操作Operation
- 小乌龟git的安装、配置(TortoiseGit安装、配置)
- PS知识点大总结(一)——基础操作
- 上海通用北盛汽车2012届校园招聘长春理工大学专业面试安排 共 27 人
- python中的in和out是什么意思
- python第三方库re库实例之爬取古诗词网上诗歌
- 动物拼图代码html,制作动物拼图美术教案
热门文章
- 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken...
- HTTP/2之服务器推送(Server Push)最佳实践
- 从小白到中级高级软件测试工程师成长路线!--(上篇)
- 分类算法之邻近算法:KNN(应用篇)
- 笔记-配置博客园客户端代码高亮(2016.08.20)
- LAMP_ 访问控制
- 体验VMware View HTML Access
- 让C++代码与C#代码一起生成一个单一的Assembly
- 152. 乘积最大子序列
- 如何解决mysql数据倾斜_什么是数据倾斜?如何解决数据倾斜?