《高质量程序设计》

一、质量度量

1.功能性:

  正确性---软件在需求范围之内的行为,包括精确性;

  健壮性---软件在需求范围之外的行为。两层:容错能力,恢复能力。eg. UNIX , Windows;

  可靠性---设计中没有料到的异常,测试中没有暴露的代码缺陷。eg. 千年虫,内存泄露,误差累积。常用统计方法分析可靠性

2.性能:(时间、空间)

  易用性;清晰性---易理解,简洁的系统设计;安全性;可扩展性---对变化的适应能力;兼容性---多个软件相互交换信息;可移植性---编程语言越低级越难移植,软件设计中“设备相关程序”与“设备无关程序”分开,“功能模块”与“用户界面”分开。

 

复用,分而治之,优化,折中。

二、C/C++

先掌握语言的特征及使用方法,再学习具体的语言实现。

1.程序的工作原理:

   程序包括可执行文件、相关文件、数据;程序工程包括多个编译单元、资源文件、静态库、配置文件等。

   可执行文件包括代码段、静态数据段、堆栈段。代码段包括源程序中的可执行语句序列;静态数据段包括全局变量、静态对象、符号表等;堆栈段给函数、线程使用。堆不属于程序,属于OS,但动态分配的内存归程序管理。

2.main(int argc , char *agrv[] , char *env[]) ;//启动程序截获命令行参数,打包成字符串数组,把地址传递给argv。env接收系统环境变量。

void main(void) ; int main(void);//返回0,正常结束;非0,错误或异常退出。

  若修改main的名字,连接器报错。VC中的启动函数mainCRTStartup(),在函数尾部调用main。编译器按特定规则将用户定义的标示符转换为对应的内部名称,eg._main()。即标识符重命名机制,Name-Mangling。

  MFC自动生成的源代码中找不到main,因为应用程序框架把main的实现隐藏起来了,不需程序员编写具体内容。

  C++标准规定:main不能重载,不能内联,不能定义为静态的,不能取地址,不能由用户直接调用。

3.声明 & 定义

  声明:不是可执行语句,故C中要求局部变量的声明必须在程序块开头,即所有可执行语句前面。向系统介绍名字,一个名字就是一块内存区域的别名。用于编译器进行静态类型检查,解释内存区的大小,便于为引用语句生成合适的目标代码。不分配存储空间,允许重复声明。

  定义:分配存储空间,只能定义一次。

4.Runtime Library

启动函数,IO系统函数,存储管理,RTTI,动态决议,dll等都会调用C Runtime Library。有多线程版,单线程版,调试多线程版等。

5. 编译时 & 运行时

编译时:编译预处理器+编译器+连接器。预编译伪指令,类型定义,外部对象声明,函数原型,标识符,修饰符号(const,static,volatile,mutable等),访问修饰符等,在编译器代码检查时起作用。

运行时:容器越界访问、虚函数动态决议、函数动态链接、动态内存分配、异常处理、RTTI等

编译单元:源文件。独立编译技术:每个编译单元可独立编译,不知道其他编译单元是否存在及其编译结果。两个定义了同名全局变量或函数的编译单元,可通过编译,但目标文件连接会出错。优:公开接口,隐藏实现。减少修改代码后重新编译的时间。

三、数据类型

1.void:无法确定类型的大小。可用来定义函数的返回类型、参数列表(无参)、指针(指向任何类型对象)。无void类型的对象,

NULL指针值,类型为void *,可赋值给任何类型指针。#define NULL ((void*)0)。合法但不是有效的指针。

2.类型转换:不同类型的操作数运算时,可能进行隐式类型转换、强制转换、运算符重载。

  隐式类型转换----安全(内存单元访问的安全、转换结果的安全)。内存访问范围扩张,内存截断,尾数截断,值改变,溢出等。

  不能把基类对象直接转换为派生类对象。

3.标识符:C中有效长度为31个字符,C++中255个字符。属性:值、值的类型、名字、存储类型、作用域、连接类型(可见性)、生存期等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值