- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目 录
第1章 预处理器 1
1.1 预处理器的定义 1
1.2 常用的宏命令 1
第2章 编程风格 3
2.1 名字 3
2.2 参数 3
2.3 语句缩排 3
2.4 Static 4
2.5 动态内存 4
2.6 好书推荐 4
预处理器
预处理器的定义
预处理器是在真正的编译开始之前由编译器调用的独立程序。预处理器可以删除注释、包含其他文件以及执行宏(宏macro是一段重复文字的简短描写)替代。预处理器可由语言(如C)要求或以后作为提供额外功能(诸如为FORTRAN提供Ratfor预处理器)的附加软件。int Add(int a, int b); //整型求和
程序清单 11
//main.cpp
#includestdio.h
#include“main.h“
#define NUM_3 3
int main(void)
{
int sum1=Add(1,2);
int sum2=Add(NUM_3,3);
return 0;
}
int Add(int a ,int b)
{
return (a+b);
}
程序清单 12
以上工程的编译过程是,首先我们见main.cpp文件名给编译器,编译器则先将其交给预处理器进行优化处理,那么预处理首先扫描main.cpp文件,按行进行,当遇到第一个include的时候,它遇到的后面是“”尖括号,所以它首先搜索路径是系统安装的默认路径进行查找stdio.h文件,找到之后将其文件中的内容替换该宏,然后扫描到#include“main.h“,这里是双引号,那么查找的路径首先是当前工作目录,预处理器将文件中内容int Add(int a, int b);替换该宏,同时将该头文件中的注释滤掉。接下来就是#define NUM_3 3,预处理器将会将该文件下所有的NUM_3用数字3进行替换不做任何处理。接着一直扫描知道文件结尾。此时将差生一个临时文件,将其内容返回给编译器进行编译工作。
常用的宏命令
C++中的宏命令很多,其中常用的有#include、#define、#ifndef、#pragma once、#endif,其中后三个的主要作用是防止头文件的重复包含,但是他们之间也是有区别的,#pragma once 并非C++标准宏命令,而是微软自己定义使用的一种命令,#ifndef···#define···#endif这样的缺点是若在编译时传递一个参数名刚好与#define的内容相同,那么该头文件将以此也没有包含导致出错。
还有在C++中尽量少用#define,因为它只是做字符串的替换工作,我们完全可以使用其他方式代替之,若定义一个常量可以使用const代替、定义类型使用typedef代替、定义函数宏使用inline函数代替。下面举一个使用宏会出现的问题:
#define MAX((a),(b)) ((a)(b)?(a):(b))
这个宏看起来很正确呀,怎么会有问题,但是:
int x = 8;
int y = 7;
int z = MAX(++x,y);
或许这样你就知道有什么问题,还有当其中参数为函数调用时将会出现该函数调用两次的情况。
所以在我们使用宏时仔细想想是否有可能导致某些问题,能否用其他更安全的方式替换之。
编程风格
名字
在实际编程中也有多种命名风格,如匈牙利命名法。虽然各有不同,但是他们的出发点是一致的,就是可读性强,命名通常是名字与作用域大小成正比,这是符合可读性的一种好习惯,在一个很小的作用域里或许使用一个n已经足以让其他人理解其含义,此时就没有必要做一些很长的命名,如
for(theElementIndex =0; theElementIndexNumberOfElements;++ theElementIndex)
elementArray[theElementIndex] = 0;
这样的命名虽然没有错但是名字过程影响阅读,它可以改为如下;
for(i = 0; ielems;++i)
elem[i] = 0;
改为这样反而更加易读也不会降低其可理解性。
函数的名字也基本一样,要简短而不损失其可读性作为代价。总而言之就是让其他人一看就知道改名字是什么作用就OK了,这也成为自注性,当然我们同样还需要为主要核心代码提供必要的注释。
参数
函数形参类型主要有普通变量、引用变量、指针变量几种。通常若传递是的是一般的数据类型而函数不对其值进行改变的可以使用普通参数和引用参数,相差不多,但是若是一些数据容器、类对象以普通参数类型传递代价可能会比较大。在C++中的形参通常是引用参数,若传递指针可能存在参数为NULL的情况,而引用肯定不会出现这种情况。
在作为参数时,若该参数只是用作传入参数而不需传出的必须使用const引用,这样可以保证其安全性以及可读
原创力文档


文档评论(0)