VS2017的C++开发心得(三)VS的常用项目属性介绍

这一篇简单介绍下常用的项目属性的使用。

首先是配置管理器,在属性页的“配置管理器”按键打开:

VS2017的C++开发心得(三)VS的常用项目属性介绍_第1张图片

所有项目创建好了以后都有两个默认的配置“Debug”和“Release”。

首先这个配置是什么意思?属性页里面有很多属性,比如第一个常规分类下:

VS2017的C++开发心得(三)VS的常用项目属性介绍_第2张图片

先看看图里标注的几项,这些算是比较常接触的。然后再回到配置,可以看到图中每一项都有个字段名和值,比如:“平台工具集”“Visual Studio 2017(v141)”。配置就是把这个项目相关的属性的字段名和值以xml的形式保存下来,这种思路是程序开发中很重要的。保存的文件就是.vcxproj。来简单看看这个文件:

VS2017的C++开发心得(三)VS的常用项目属性介绍_第3张图片

配置文件基本就是这样,现在来说下配置文件的好处,就从vs自带的Debug和Release说起。

首先谈谈程序开发大致分为三个阶段:写代码、调试和发布,而这两个配置就基本就是为了方便我们开发设定的。写代码和调试使用Debug,发布测试使用Release。这两个配置最大的区别在哪?对于代码的优化程度不同,生成汇编代码的体量不同。这个就要扯一点编译器的知识,编译器就是把我们的C++语言翻译成汇编指令。然而对于编译器来讲我们很多代码是很多余的,比如:

VS2017的C++开发心得(三)VS的常用项目属性介绍_第4张图片

如果改成 int main(){return algorithm(1,3);}那么这个algorithm函数就对main产生了影响,才会进入到编译中。如果编译器再狠一点,真正编译的结果应该只有一个 return -2。再扯就很远了,回到debug和release上。我们刚才见识了编译器的牛逼:帮我们优化代码。但有时候代码出了bug,如果凭借优化后的代码,我们很难去查找源代码中的错误。

所以debug最大的功能就是保持代码的原始性。基本就是放弃优化了,你写啥就是啥,所以你可以单步调试你所有写过的代码。而release调试你会发现很多代码它是直接跳过的,然后代码运行的顺序也可能和你预想的不一样,更重要的是你的很多变量也被优化了。变量优化对于调试程序来讲是很麻烦的,因为这时候你的变量名对应的值已经不再是你预计的那个变量了。

说到这里,大家可以想象Release生成的程序运行速度是要比debug下快很多的。所以我们最终发布到网络下载的程序都是Release版本。

好,说完配置,配置管理器里面还有一个选项是平台,即“Win32”和“64”两个。这个很好理解就是32位系统和64位系统。因为目前32位系统还未淘汰,所以都用32位就好。简单说下,如果你程序中大量使用64位的变量类型比如:int64和double,64位程序确实有计算速度上的优势。

最后说下Debug和Release另一个区别,可能很多人也没注意,那就是:变量的初始化不同。

如果我声明了一个int a; 它在release下的初始值是0,而在debug下是0xcccccccc 或者是0xcdcdcdcd(这两种情况都碰到过)

这个影响最大的就是没有赋初始值习惯的人。常常我们会去判断指针是否为NULL再操作,如果你没有初始化即便指针赋值失败后指针仍然不为NULL,这时候使用这个指针就会出现"读取0xcccccccc (或 0xcdcdcdcd)访问冲突"的崩溃,即访问到错误内存位置。所以一定要养成赋初始值的习惯,不要认为多余,要是真的多余了编译器会帮你优化掉的。

 

你可能感兴趣的:(VS2017的C++开发心得(三)VS的常用项目属性介绍)