当前课程知识点:基于Linux的C++ > 第一讲 C/C++基本语法元素 > 1.6 程序设计风格 > LinuxCPP0106
最后一部分就是关于
整个程序的设计风格
涉及到几个简单小知识
第一个是关于注释的
第二是命名规范
第三是宏与常量
第四就是赋值语句的简写形式
然后第五个就是我们源代码的排版格式
我们先从注释开始讲
注释的目的是为了强调
整个程序的可读性和可维护性
标准格式有两种
一种是“/*” 和“*/”对 配对用
另外一种用“//”来表达
两者使用有差别
“/*”和“*/”配对的时候
它可以出现在程序代码任何一个地方
只要出现这个配对
它就认为中间代码全是注释
编译器在编译代码的时候就会跳过去
不编译了
比如说“int /* 此处内容为注释*/ a;”
结果这行代码编译出来
就是“int a;”
第二个就是“//”
双斜杠表示这个注释从当前“//”处开始
一直到这个文本行的结尾
“/*”和“*/”对它可以跨行
“//”是不跨行的
同一种注释标记不可以嵌套
特别注意这一条
“//”还好 因为它都是单行注释
只注释这一行
从这个地方开始到这一行结尾
“/*”和“*/”是跨行注释
它是不可以嵌套的注释的
同学们要特别注意
第二个是标准命名规范
C++代码使用ASCII码字符集
它包括了大小写英文字母
包括数字
包括一些部分的特殊字符(标点符号)
这就是我们的字符集
特别注意
为量、类型、函数命名的时候
这些东西的名字就叫标识符
这个标识符必须以下划线
或者是一个英文字母开头
后面跟着下划线
英文字母和数字来组成
不能以数字来打头
因为它和数字的值没有办法区分
注意这个变量的名字
或者标识符这个名字
是区分大小写的
大写和小写是不一样的
特别注意这一条
关键字就是系统中给我们提供的
一些已经预先定义好的
具有特定意义的标识符
你可以用 你不可以重新命名 比如int
那就是整型这个数据类型标识符 关键字
你就不可以将变量名字
定位为int 那不行
这就叫关键字
你可以用
但是已经系统定义好
你就不可以重新定义它
第三个就是宏与常量
宏标准定义就是#define这样一条指令
后面跟着两个部分
一个部分就是宏的名字
后面跟着一大串
就是宏想要对应的那个文本
注意它实际上是文本
简单文本替换 后面不需要分号
如果真有分号
则分号就是替换文本一部分
你看到这个代码
#define表示它是宏定义
后面一定会有一个空格
至少一个空格
后面跟着就是宏的名字
这个宏名字我们决定下来了
就是PI 大写的PI
再接下来 从PI空格后面跟着那个字符开始
一直到这一行结尾
全是PI宏名所对应的那个文本
宏本身并不是常量
在编译的时候 查找PI
用后面的文本全部替换
替换完一遍以后
才开始编译
这就是宏
有了const关键字
可以定义常量以后
我们很少再使用宏来定义
像这样的宏文字
我们C++代码中
优先使用常量而不是宏
宏的目的和意义和常量非常类似
就是增强我们程序的可读性
和程序的可维护性
这就是我们宏与常量
赋值语句有一些简写的形式
在我们程序中
经常就需要做类似这样一些指令
x = x + a
x = x - a
x = x * a
诸如此类操作经常会做
如果你每次都这么写很麻烦
C++的程序员认为这个东西麻烦
给它提供简写的形式
就是x += a
它就表示它是一个加赋的动作
把a累加到x上
乘赋就是把a累乘到x上
减赋呢 从x上把a减去
除赋呢 就是从x中除掉
但是对于除法
同学们要特别记住
因为C/C++语言这个除法
涉及到在整数上面做除法
还是在浮点数上做除法
两者是不一样的
如果x和a都是整数
那么除法动作就是一个整数除法
出来的结果就是整数
小数部分忽略掉
比如9 / 2
结果它实际上是4 而不是4.5
同学们一定要记住
它整数除法出来的结果是4
而不是4.5
那么你想取得余数
你用百分号除法 就9 % 2
它也是一个除法
但实际上取两者
除了结果以后的那个余数
所以叫余赋
9 % 2 它的结果是什么 1
9 / 2结果是4 然后余数为1
结果就是1 就这个意思
两者都是整数 那么除法就是整数运算
你要想它的结果为4.5
有一个方案 就是把9和2
不管是除数或被除数
只要其中某一个
换成double类型的量或者float类型
换成小数 那么结果自动变成小数
比如换成9.0 / 2 那结果就是4.5
9 / 2.0
结果也是4.5
特别需要说明的就是x *= a + b
像这样一个表达式
你要把a + b算完了以后才能累乘到x上
注意右边那个表达式
你必须把它做完才可以
否则没有这个括号
它的优先级是不对的
这个地方需要特别注意
其它没什么
然后最后一部分就是源代码排版
我们有一些基本规则
正常情况下你这个代码排得漂亮不漂亮
对理解这个程序和维护这个程序
有巨大的影响
形式上很美观很重要 在这一点
所以说我们有一个排版的规则
同学们要经过长期的实践
你可能会形成自己的排版规则
我这里有一个基本建议
你就照着这个建议去做
做完了以后
你才能摸索出适合你自己的
第一条 递进层次
应该使用左缩进格式
像从左边不断向后缩进
一个层次 一个层次缩进一点
一个层次 一个层次缩进一点
按照这个格式缩进
一行代码不应该太长
正常情况下不要超过80个字符
早期那些个文本行计算机一行
就能够显示80个英文字符
尽量不要超过它
现在大家都用宽屏显示器
有的时候在一行能够写很多
尽量不要超过
超过的话不太容易理解 应该换行
然后函数
函数代码尽量不要超过60行
如果真超过60行怎么办呢
把它换成两个函数拆分
形成两三个函数
这样的话 整个程序写起来
别人阅读和维护起来就更方便了
然后复合语句的书写格式要统一
要使用空行
你可以使用空行区分不同的代码段
然后除非特别必要
你不要在一行写很多条代码
那是不对的
别人不太容易理解
然后你的命名规范
你的标识符命名规范应该是一致的
还有最后一条最重要的
无论采用什么样的标准
你都一定要在这个标准确定下来之后
按照这个方式去执行
不要胡乱变
这是非常重要的
-1.1 提纲
-1.2 程序设计的基本概念
-1.3 简单C/C++程序介绍
-1.4 程序设计的基本流程
-1.5 基本语法元素
-1.6 程序设计风格
-1.7 编程实践
-第一讲 C/C++基本语法元素--编程实践提交入口
-2.1 提纲
-2.2 结构化程序设计基础
-2.3 布尔数据
-2.4 分支结构
-2.5 break语句
-2.6 循环结构
-2.7 编程实践
-第二讲 程序控制结构--编程实践提交入口
-3.1 提纲
-3.2 函数声明、调用与定义
-3.3 函数调用栈框架
-3.4 编程实践
-第三讲 函数--编程实践提交入口
-4.1 提纲
-4.2 算法概念与特征
-4.3 算法描述
-4.4 算法设计与实现
-4.5 递归算法(一)
-4.6 递归算法(二)
-4.7 容错与计算复杂度
-4.8 编程实践
-第四讲 算法--编程实践提交入口
-5.1 提纲
-5.2 库与接口
-5.3 随机数库(一)
-5.4 随机数库(二)
-5.5 作用域与生存期
-5.6 典型软件开发流程(一)
-5.7 典型软件开发流程(二)
-5.8 编程实践
-第五讲 程序组织与开发方法--编程实践提交入口
-6.1 提纲
-6.2 字符
-6.3 数组(一)
-6.4 数组(二)
-6.5 结构体
-6.6 编程实践
-第六讲 复合数据类型--编程实践提交入口
-7.1 提纲
-7.2 指针基本概念
-7.3 指针与函数
-7.4 指针与复合数据类型(一)
-7.5 指针与复合数据类型(二)
-7.6 字符串
-7.7 动态存储管理(一)
-7.8 动态存储管理(二)
-7.9 引用
-7.10 编程实践
-第七讲 指针与引用--编程实践提交入口
-8.1 提纲
-8.2 数据抽象(一)
-8.3 数据抽象(二)
-8.4 链表(一)
-8.5 链表(二)
-8.6 链表(三)
-8.7 链表(四)
-8.8 函数指针(一)
-8.9 函数指针(二)
-8.10 抽象链表(一)
-8.11 抽象链表(二)
-8.12 编程实践
-第八讲 链表与程序抽象--编程实践提交入口
-9.1 提纲
-9.2 程序抽象与面向对象
-9.3 类类型
-9.4 对象(一)
-9.5 对象(二)
-9.6 类与对象的成员(一)
-9.7 类与对象的成员(二)
-9.8 类与对象的成员(三)
-9.9 继承(一)
-9.10 继承(二)
-9.11 继承(三)
-9.12 多态(一)
-9.13 多态(二)
-9.14 编程实践
-第九讲 类与对象--编程实践提交入口
-10.1 提纲
-10.2 四则运算符重载(一)
-10.3 四则运算符重载(二)
-10.4 关系与下标操作符重载
-10.5 赋值操作符重载(一)
-10.6 赋值操作符重载(二)
-10.7 赋值操作符重载(三)
-10.8 赋值操作符重载(四)
-10.9 赋值操作符重载(五)
-10.10 流操作符重载(一)
-10.11 流操作符重载(二)
-10.12 流操作符重载(三)
-10.13 操作符重载总结
-10.14 编程实践
-第十讲 操作符重载--编程实践提交入口
-11.1 提纲
-11.2 泛型编程概览
-11.3 异常处理机制(一)
-11.4 异常处理机制(二)
-11.5 运行期型式信息(一)
-11.6 运行期型式信息(二)
-11.7 模板与型式参数化
-11.8 题外话:术语翻译
-11.9 泛型编程实践(一)
-11.10 泛型编程实践(二)
-11.11 泛型编程实践(三)
-11.12 泛型编程实践(四)
-11.13 泛型编程实践(五)
-11.14 泛型编程实践(六)
-11.15 泛型编程实践(七)
-11.16 泛型编程实践(八)
-11.17 泛型编程实践(九)
-11.18 泛型编程实践(十)
-11.19 编程实践
-第十一讲 泛型编程--编程实践提交入口
-12.1 提纲
-12.2 程序执行环境(一)
-12.3 程序执行环境(二)
-12.4 程序执行环境(三)
-12.5 程序执行环境(四)
-12.6 输入输出(一)
-12.7 输入输出(二)
-12.8 文件系统
-12.9 设备
-12.10 库(一)
-12.11 库(二)
-12.12 makefile文件(一)
-12.13 makefile文件(二)
-12.14 makefile文件(三)
-12.15 编程实践
-第十二讲 Linux系统编程基础--编程实践提交入口
-13.01 提纲
-13.02 进程基本概念
-13.03 信号
-13.04 进程管理(一)
-13.05 进程管理(二)
-13.06 进程管理(三)
-13.07 进程间通信(一)
-13.08 进程间通信(二)
-13.09 进程间通信(三)
-13.10 进程间通信(四)
-13.11 进程池
-13.12 编程实践
-第十三讲 进程编程--编程实践提交入口
-14.1 提纲
-14.2 线程基本概念
-14.3 线程管理(一)
-14.4 线程管理(二)
-14.5 线程管理(三)
-14.6 线程管理(四)
-14.7 线程同步机制(一)
-14.8 线程同步机制(二)
-14.9 C++11线程库(一)
-14.10 C++11线程库(二)
-14.11 C++11线程库(三)
-14.12 C++11线程库(四)
-14.13 C++11线程库(五)
-14.14 编程实践
-第十四讲 线程编程--编程实践提交入口
-15.1 提纲
-15.2 Internet网络协议
-15.3 套接字(一)
-15.4 套接字(二)
-15.5 编程实践
-第十五讲 网络编程--编程实践提交入口