中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > C/C++
[注意]C每日一贴(一)
作者:未知 时间:2005-09-13 19:17 出处:ChinaUnix.net 责编:chinaitpower
              摘要:[注意]C每日一贴(一)

1.文件结构:
     /* Copyright (c) 2002 北京UBI公司
      * All rights reserved
      * 
      * 文件名称:lud.c
      * 摘    要:处理字符串
      * 版    本:2.1
      *作    者:ludejun
      *完成日期:2002/01/01
      *
      *取代版本:2.0
      *原    作:lud98
      *原作日期:2001/11/11
      */

 
      头文件分目录存放


      #ifndef GRAPHICS_H
      #define GRAPHICS_H   

      #include<math.h>
      #include"ludheader.h"

      void Function()
      {

      }  


      class Box()
      {
 
      }

      #endif



2程序的版式:
A.空行:
声明之后,函数定义结束以后。
同一个函数体,逻辑关系不紧密的行之间。
B.代码行:
同一行代码只作一件事情。
If   for   while   do  自占一行,而且不管有多少语句,都加上{}
关键字之后留空格:
函数名之后不要留空格。
"("向后紧跟;","")"";"向前紧跟,且紧跟出不留空格。
","之后留空格。
二元操作符的前后都需要有空格。
一元操作符前后不要空格如:~ ! ++ -- 等。
[ ]  .  -> 三个复后前后不加空格。
C.对齐
{} 应该自占一行,而且位于同一列。并且和引用他们的语句左对齐。
{  后面的代码块在其右边数格处左对齐。

D.长行拆分:
最大的长度应在70~80个字符之间。
特别长的行:拆分缩进,把运算符放在前边。
E.修饰符:
* 和 & 应靠近变量名称。     int  *x, y;

F.注释:
注释不可选宾夺主。
代码清晰的时候,不加注释。
写代码,写注释;改代码,改注释。
注释应准确,易懂。不能写缩写。
位置:在被注释代码的上方和右方。
多重(欠套)循环,在段落的结束处加注释。

G.类的版式:
Private 类型的数据写在前边。
Public 函数在前,Private 函数在后。
3命名规则:
Microsoft 公司的"匈牙利"法:在变量,函数名中加入便于理解的前缀。
Int  ia, ib, ix;
Float fa, fb, fd;

采用英文组合。
Windows采用大小写混排。
Unix类的系统采用小写加下划线。
不要有仅仅是大小写不用的变量。
不要有名称完全一样的全局变量和局部变量。
变量名称尽量用名次或者形容词加名词。      
全局函数名称尽量用动词或者动词加名词。
禁!避免出现数字编号。
Windows程序的命名规则
类名,函数名用大写字母开头的单词组合而成。
变量,参数用小写字母开头的单词组合而成。
常量全用大写字母,用下划线分隔。
静态变量前缀加s_
尽少使用全局变量。如果需要,以g_ 开头。
类的数据成员前面加m_ 区别于数据函数的参数。
加上反映软件性质的前缀。如prd
Unix 应用程序的命名规则。
4表达式和基本语句。
A.加上括号以使运算的优先级鲜明。
B.复合表达式注意:
a.别台复杂。
b.禁止有多个用途(隐含用途。)
C.If语句
布尔与零值比较:  if(flag)  或者    if(!flag)
整型和零值比较:  if  (vlaue==1)    或者  if  (value!=1)
指针与零值比较:  if (p==NULL)    或者   if  (p != NULL) 
实型和零值比较:  const float EPSINON = 0.000001
                  if ( (x >= EPSINON) || ( x <= EPSINON) 
D.循环的效率
尽可能把最长的循环放到程序的最里层。 
E.循环变量采用半开半闭的方法:
for (I = 0 ; I < N ; I++)
F.Switch 语句
别忘了break;
别忘了 default :break;
5常量
A.好处:
a.可读性;
b.避免多处来回书写的时候书写错误
c.改动容易。
B.Const和#define的比较。
Const有类型、可调试。完全取代Define常量。 
C.常量定义规则:
a.需要公开的常量,放在头文件里;不需要公开的,放在定义文件的头。可以把不同模块的常量放到同一个文件中一边集成管理。
b.如果常量之间密切相关。应该在定义的时候来定义出来,而不应该分头去写。如 const float DIAMETER = RADIUS * 2
D.类中的常量;
整个类中都恒定的常量可以用枚举型的变量来定义;
class A 
{
   enum { SIZEMAX = 100, SIZEMIN = 200}
   int Array[SIZEMIN];
};
但是有个弊端就是不能表示浮点数。
6函数设计
A.参数的规则:
a.书写要完整。不能只写类型不写参数名称。
b.对没有参数的函数,用void补充
c.参数命名要恰当,顺序要合理。                                              Void StrCopy(char *strSource ,  char *strDestination)
d.函数的参数个数需要控制,尽可能不大于5
e.禁止使用类型和数目不确定的函数参数。。
B.返回值的规则。
a.任何函数都需要有返回值。如果没有,则用void代替。
b.函数名字和返回值类型不要冲突。
c.当返回值是对象的时候,引用传递往往比值传递效率高。
C.函数内部实现的规则。
A.在入口处对参数的有效性进行检查。
B.在出口处对return值得有效性进行检查。
C.不要将return  int(x + y) 写成:int temp = x + y;    return temp;
D.构造建议:
a.功能单一,不要编制多种能的函数。
b.函数体的规模要小,尽量小于50行代码。
c.避免记忆功能,相同的输入相同的输出。即行为可预测性。
d.不仅仅要检查参数的有效性,其他途径进入函数体的文件句柄,全局变量等也要校验。
e.用于出错处理的返回值一定要清楚。让读者不容易忽视、误解错误信息。



 Chinajiji 回复于:2002-10-31 13:24:21
写得好!
能写出以上内容,说明老兄有相当丰富的编程经验!有许多值得借鉴的地方.
我提出以下意见供你参考并与大家讨论:
1)文中有许多涉及编程风格的内容,如果规定得太死,是不是有损c/c++书写灵活的优点?虽然你提供的风格都有一定的可取之处,但风格不是唯一的.我觉得只要在风格不损害大原则的前提下,还是不规定得太多太死为好,国有企业就是管得太多太死而失去了活力的.^_^
例如:void f(void){
           ..................
     }
与  void f(void)
   {
    ..........
   }
都可以,可读性第一种比第二种不会差多少,但第一种更紧凑.建议你用"必须,禁止,宜,不宜"等字来描述.
2)建议加几条:
  a:有可利用的标准库函数,一般情况下优先使用之,最好不要自己重写.
  b:能拆分成多个函数的函数,不要合成一个.
  c:能避免使用指针的情况下,宜尽量避免使用.
  d:定义一个变量时,尽可能立即初始化它.
  e:class的定义和实现要分开(inline函数除外)
  f:类型转换用static_cast<>,const_cast<>或reinterpret_cast<>;在用后两种,特别是最后一种类型转换时表示你屏蔽了编译器的类型检查,所以首先要想想是不是可以避免使用类型转换.
3)对于文中所提到的以下内容:
D.类中的常量;
整个类中都恒定的常量可以用枚举型的变量来定义;
class A 
{
  enum { SIZEMAX = 100, SIZEMIN = 200}
  int Array[SIZEMIN];
};
我个认觉得写成这样更好:
D.类中的常量;
class A 
{
  const int SIZEMAX = 100;
  const int SIZEMIN = 200;
  int Array[SIZEMIN];
};
原因我想你知道.但有一个问题:在Vc6.0下会出现编译错!我faint!标准c++是可以的.注意:在class的定义中,除了const int以外都不能这样做,如class A{
public:const float PI=3.1415;
}; 错! 
class A{
public:
  static int MAX=10;//错!
};
class A{
 public:
 const int array[]={1,2,3};//错!不能这样初始化数组!
};

我觉得在定义一个class时,public 在最前好,因为public是接口,别人读你的class时,首先读到的就会是interface;而不是implement;更多的人关心的是interface而不是implement;不过private memeber 在前对class 设计者要方便些,因为public member function常要用到private member,如果public member function 先于private member书写,此时private member却还没写好,这样就不方便了.

4)以下内容中你写了一个错别字:
"4表达式和基本语句。
A.加上括号以使运算的优先级鲜明。
B.复合表达式注意:
a.别台(太)复杂。"

谢谢你给大家提供了一篇有价值的文章,继续努力!




  




 goodboy 回复于:2002-10-31 15:32:15
都是高手,给我推荐两本c语言好书呀!我要精通C语言,我现在还是毛头小子

 jerryesquire 回复于:2002-10-31 17:44:24
不错!

 zglcl008 回复于:2002-10-31 20:00:36
开发约定
还行,继续努力吧,

 春华 回复于:2002-10-31 22:03:17
太好了谢谢谢谢啊
但我想提一点意见.
每日一贴可能有点不妥.因为简单的就好,但如果有的会可能一天还消化不完,那就

 HopeCao 回复于:2002-11-01 12:57:49
似曾相识啊!!??

 windtouch 回复于:2002-11-01 13:38:09
ludejun98  Chinajiji  
太感谢你们了!!!
希望像zglcl008一样的高手能发表些意见,让我们这些菜鸟学习学习
谢谢!!        

 ludejun98 回复于:2002-11-01 13:46:17
class A 
{
 const int SIZEMAX = 100;
 const int SIZEMIN = 200;
 int Array[SIZEMIN];
};
老兄,这就是功底的问题。了。在A进行初始化的时候,系统找不到const,所以会报错。

 Chinajiji 回复于:2002-11-01 14:21:51
对不起,我写掉了一个关键的"static"改为:
class A{
public:
      static const int SIZEMAX = 100;
      static const int SIZEMIN = 200;
      int Array[SIZEMIN];
};
如果没有static 当然不行啊.再次道歉!

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有