- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高质量C编程学习笔记
普通程序员应该做到:(1)知错就改;
(2)经常温故而知新;
(3)坚持学习,天天向上。
C++/C程序通常分为两个文件:1. Declaration保存程序的声明(.h)
Implementation保存程序的实现(.c)
头文件的作用:通过头文件来调用库功能;加强类型安全检查。
头文件一般保存于include目录,定义文件按保存于source目录。
版式:
一行代码值做一件事情。
尽可能在定义变量的同时初始化该变量。
代码行最大长度宜控制在70至80字符以内。
类的版式:以行为为中心,重点关注是类应该提供什么样的接口(服务),public类型的函数写在前面,private类型的数据写在后面。
命名规则:匈牙利法:在变量和函数名中加入前缀以增进人们对程序的理解。(ppch:指向字符指针的指针)
Windows应用程序的标示符通常采用大小写混排的方式,如AddChild
Unix应用程序的标示符通常采用小写加下划线的方式,如add_child.
表达式与基本语句(别用隐含错误的方式写代码)
不可将布尔变量直接与TRUE,FALSE或者1,0进行比较,不同编译器的bool值是不同的
不可将浮点变量用“==”或“!=”与任何数字比较,因为有精度限制。
应当将指针变量用“==”或“!=”与NULL比较。
循环语句的效率(降低循环的复杂性)
多重循环中,如有可能,应当将最长的循环放在最内层。
如果循环体内存在逻辑判断,并且循环次数很大,最好将逻辑判断移到循环体外面。
Switch语句存在的理由:多分支选择语句,虽然可以用嵌套if语句来实现多分支选择,但那样程序冗长难读。
Switch语句中每个case语句不要忘了加break。
不要忘记default分支,即使不需要,也要保留default:break;
常量:值在运行期间恒定不变。C语言中用#define来定义常量(称为宏常量),c++中除了#define外,还可以用const来定义常量(const常量)。
Const与#define比较:
const优点:1.const常量有数据类型,宏常量没有数据类型。
2.有些集成化的调试工具可以对const常量进行调试,但不能对宏常量调试
●在c++中只使用const常量而不使用宏常量。
需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把
同模块的常量集中存放在一个公共的头文件中。
类中的常量:只能用枚举常量来实现!
Const数据成员只在某个对象生存期内是常量,而对整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。
不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道值是什么。
Const数据成员的初始化,只能在类构造函数的初始化表中实现。
函数设计
函数接口的两个要素是参数和返回值:C语言中,函数的参数和返回值的传递方式有两种;值传递和指针传递,c++多了引用传递。
引用传递:性质像指针传递,而使用方式却像值传递。
参数的规则:
参数的书写要完整,如果函数没有参数,用void填充。
参数命名要恰当,顺序要合理。(目的参数放在前面,源参数放在后面)。
如果参数是指针,且仅作输入用,应在类型前加const,以防止该指针在函数体外被修改。
如果输入参数以值传递的方式传递对象,宜改用“const ”,省去零时对象的构造和析构过
程,提高效率。
参数个数尽量控制在5个以内。
尽量不要使用类型和数目不确定的参数。
返回值的规则:
不要省略返回值的类型。
函数名字和返回者类型在语义上不可冲突。(getchar其实int类型,而不是char类型)
不要将正常值和错误标志混在一起返回,正常值用输出参数获得,错误标志用return语句返回。
有时候函数原本不需要返回值,但为了增加灵活性,可以附加返回值。
函数内部实现的规则:(在函数体的入口处和出口处把关)
在函数体的入口处,对参数的有效性进行检查,从分理解并正确使用“断言”(assert)
在函数体的出口处,对return语句的正确性和效率进行检查。
return语句不可返回指向“栈内存”的指针或者引用,因为该内存在函数体结束时被自动销毁。
搞清楚返回的究竟是值,指针还是引用。
如果函数返回值是一个对象,要考虑return语句的效率。
函数体功能要单一,不要设计多用途的函数;函数体的规模要小,尽量控制在50行代码以内;尽量避免函数带有“记忆”功能。
Debug版本release版本的区别:debug版本用于内部调试,release版本发型给用户使用。
断言assert是仅在debug版本起作用的宏,用于检查
文档评论(0)