工作了一段时间
最有感触的就是程序的规范问题
下面就列出一些在写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.名称设置方法 1)小程序名称可以由中文.数字.英文.长度在4-30个字符之间,一个中文字等于2个字符. 2)公众号.小程序在微信公众平台上的名称是唯一的,且属于同一主体下,可以 ...

  2. C语言 程序代码编写规范

    前言 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性. 说明 l 本文档主要适用于刚刚开始接 ...

  3. c语言程序前言,C语言 程序代码编写规范前言

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性 ...

  4. c语言程序报告的前言,C语言 程序代码编写规范前言

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性 ...

  5. 小程序开发运营必看:微信小程序平台运营规范

    一.原则及相关说明 ​ 微信最核心的价值,就是连接--提供一对一.一对多和多对多的连接方式,从而实现人与人.人与智能终端.人与社交化娱乐.人与硬件设备的连接,同时连接服务.资讯.商业. ​ 微信团队一 ...

  6. 开发运营必看,跳出雷区必须知道的微信小程序平台运营规范

    一.原则及相关说明 ​ 微信最核心的价值,就是连接--提供一对一.一对多和多对多的连接方式,从而实现人与人.人与智能终端.人与社交化娱乐.人与硬件设备的连接,同时连接服务.资讯.商业. ​ 微信团队一 ...

  7. 2005年10月--至今 开发过的项目

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! ==== ...

  8. 2005年10月--至今,开发过的项目

    =====武汉智远科技有限公司============================================ 1.2005 年10月 -2006年 2月 << 面向用户的网络性能 ...

  9. 【Microsoft Azure 的1024种玩法】二十四.通过Azure Front Door 的 Web 应用程序防火墙来对 OWASP TOP 10 威胁进行防御

    [简介] 我们都知道像 SQL 注入.跨站点脚本攻击(XSS)之类的恶意攻击以及 OWASP 发现的十大威胁都可能会导致服务中断或数据丢失,让 Web 应用程序所有者受到巨大威胁.那么如何有效的解决O ...

  10. 程序员初入公司:10大经验让你能力提升20倍!

    IT企业普遍有个特点,"把女人当男人用,把男人当**(此处略去2个字)用." 有句俗话说,"男怕入错行",我想这句话其实也同样适用IT女生. 我们可以做个小测试 ...

最新文章

  1. 工具用的好下班走的早
  2. linux 串口控制read()的说明
  3. SQL注入法攻击一日通
  4. 找出占用cpu最高的线程
  5. 不怕贼偷,就怕贼惦记!
  6. Mac Big Sur如何更改锁屏时间
  7. 物联网核心安全系列——智能监控安全问题
  8. SOP 中的 Service
  9. EF的注解Annotation和Fluent API
  10. java 缓存日志_Java日志缓存机制的实现(3)
  11. 小施同学的投资日记 开篇
  12. rancher k8s docker 关系_CentOS7下利用Rancher搭建K8s集群
  13. paip.mysql error2003 Can''t connect to MySQL server on localhost (10061)的解决
  14. 翻译:swift 5通过使用泛型进行高级异步操作Operation
  15. 小乌龟git的安装、配置(TortoiseGit安装、配置)
  16. PS知识点大总结(一)——基础操作
  17. 上海通用北盛汽车2012届校园招聘长春理工大学专业面试安排 共 27 人
  18. python中的in和out是什么意思
  19. python第三方库re库实例之爬取古诗词网上诗歌
  20. 动物拼图代码html,制作动物拼图美术教案

热门文章

  1. 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken...
  2. HTTP/2之服务器推送(Server Push)最佳实践
  3. 从小白到中级高级软件测试工程师成长路线!--(上篇)
  4. 分类算法之邻近算法:KNN(应用篇)
  5. 笔记-配置博客园客户端代码高亮(2016.08.20)
  6. LAMP_ 访问控制
  7. 体验VMware View HTML Access
  8. 让C++代码与C#代码一起生成一个单一的Assembly
  9. 152. 乘积最大子序列
  10. 如何解决mysql数据倾斜_什么是数据倾斜?如何解决数据倾斜?