现在的位置: 首页 > 综合 > 正文

代码编写规范

2013年10月27日 ⁄ 综合 ⁄ 共 1865字 ⁄ 字号 评论关闭

如何学好软件开发?
写程序、写程序、写程序………………..
不是仅仅写一些“示例”程序,而是写好一个个具有完整功能的“能用”的程序
这将不仅仅涉及到一两个独立的知识点,而是一系列的问题
本章将围绕一个电话本程序展开
本章的学习方法:
大致查看程序结构
调试、调试、调试……
提前预习程序

开始电话本的编写之前,先确定好一些基本的代码编写规范

bool CWinControl::HandleNeeded()
{
  if(m_handle == 0)
  {
    if(m_parent != NULL) 
      m_parent->HandleNeeded();

    CreateHandle();
  }
}

 

bool myclass::fun1(){
if(h==0) {
if(pw!=NULL)pw->fun1();
fun2();
}
}

左边的代码好看,还是右边的代码好看?

右边的代码没有缩进,行与行之间完全对齐,一团乱麻
左边代码都空了两格
右边代码==和!=两边没有空格,而左边有,让这两个符号很显眼
左边代码类名前,以“C”开头;函数名中每个单词首字母大写;成员数据以m_开头
类、函数、变量的名称命名有意义,如HandleNeeded,是否需要句柄;m_handle即代表句柄

 

代码的命名规范naming convention包括:
匈牙利命名法、Pascal命名法、Delphi命名法、驼峰命名法、…
个人的代码编写规范:
类命名以CL开头、结构体以SL开头
函数命名通常采用多单词,每个单词首字母大写
数据成员以m_开头
常量大写
代码缩进量:2个字符或4个字符
计算符号左右两边各空一格
函数通常50到70行以内
类通常200到300行以内
一个类包含一个.h文件和.cpp文件,文件名称均为类名
圈复杂度方面(判断节点的个数+1)

该使用常量的地方一定要使用常量,避免使用magic number

word = getAword(……);
if word == “hello”
   word =  upperCase(word);
…..
               file1.c

word = getAword(……);
if word == “hello”
   word =  lowerCase(word);
…..
               file2.c

 

当读到单词hello时,如果选择了大写按钮,就将hello变成大写,选择小写按钮,就将hello变成小写
客户要求变了,不是hello而是遇到love,怎么办?
本例将改动两个文件中的hello,若文件多了怎么办?
查找替换功能保险吗?gethello函数名、某地方确实要处理hello
直接的办法:使用宏。#define KEYWORD “hello”
只需要修改一句宏即可

也不是太可靠
用宏定义表达式时,要使用完备的括号
#define ADD(a, b) a + b,有问题吗?
计算ADD(a, b) * ADD(c, d)时,将为a+b*c+d
#define ADD(a, b) (a + b)
(a+b)*(c+d),这种形式貌似正确
若define MUL(a, b) (a * b),形式同ADD
计算(a+b)*c,MUL(a+b, c)扩展为a+b*c
#define ADD(a, b) (a)+(b)
(a)+(b)*(c)+(d)
#define ADD(a, b) ((a)+(b))

使用宏时,不允许参数发生变化
#define SQUARE(a) ((a)*(a))
int i = 5;
SQUARE(++i);
用大括号将宏所定义的多条表达式括起来
#define SET(l, w, h) \
 l = 0; \
 w = 0; \
 h = 0;

for(int i = 0; i < 100; i++)
 SET(a[i].l, a[i].w, a[i].h);

尽量不要使用宏,而应用const、inline函数等
在调试程序时,看不见宏的名称,而用const的变量则可以
inline函数在调用处会展开,同宏类似,比一般函数调用高效,但又比宏安全
代码2.1

为什么带const的能编译通过,而不带const就不能编译通过
因为const 告知这是一个静态的局部变量,就是多次重复定义也没有事情的。

 

什么是编译单元

当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。这个编译单元会被编译成为一个与cpp 文件名同名的目标文件(.o或是.obj)
连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。

 

如何才能防止重定义

还可以加上extern int i = 0;

来告知这是一个全局变量,再次重复定义的时候就会在连接的时候变成引用(我想)也可以避免重定义错误

抱歉!评论已关闭.