VS开发C++的一些问题——VS项目工程文件、Debug与Relase模式、字符集问题以及_T()宏
本文最后更新于:2021年1月26日 下午
简介:VS工程项目相关文件,如何让自己编好的程序在其他电脑上运行,字符集
VS工程项目相关文件
VS是使用解决方案来管理项目的,同一个解决方案之下就可以添加多个项目。
而在多个项目的时候,一般编译调试都是执行的第一个创建的项目,此时可以选择 右键“解决方案”-->设置启动项目-->通用属性里的启动项目-->选定当前选定内容。
总的来说解决方案会对应一个文件夹,文件夹里会有不同的项目文件夹。
sdf文件是一个数据库文件,记录了解决方案的各种信息。
opensdf文件是项目被打开时才会出现的,项目关闭后此文件也会消失,估计是sdf文件的临时文件。
sln文件是整个解决方案的配置文件,(Microsoft Visual Studio Solution),通过VS2013打开sln文件就可以将整个解决方案导入到VS中打开。
sln(Visual Studio.Solution)通过为环境提供对项目、项目项和解决方案在磁盘上的位置的引用,可以将他们组织到解决方案中。
suo文件(Visual Studio Solution User Options)是解决方案用户选项。
suo 解决方案用户选项,记录所有将与解决方案建立关联的选项,存储了用户对界面的自定义配置,包括布局、断点、打开的文件等。
在Project1中写一个HelloWorld语句之后,Project1项目文件夹如下所示
vcxproj文件是项目文件,保存了整个项目的配置信息。经过测试可以通过打开这个文件来直接打开这个项目以及解决方案。
vc5,6的工程文件是.dsp
vc2002-2008工程文件是vcproj
vc2010之后是vcxproj
vcproj和vcxproj都是xml格式的。
vcxproj.filters文件是文件存放工程的虚拟目录信息,也就是在解决方案浏览器中的目录结构信息。
cpp文件就不用多说了🙃
Debug文件夹是VS在 Debug
模式下编译链接执行后生成的文件夹, 与之相对应的是 Release
模式,在此模式下就会生成Release文件夹。
打开Debug文件夹,其内有上述这些文件。
log文件是主要记录编译过程中的输出信息、日志。可以打开看看,内容和执行时的内容差不多。
pdb文件是调试的符号文件,程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置。
obj文件是C、CPP编译后的二进制文件。
VS执行生成的可执行文件放在解决方案目录里的Debug目录里。
exe文件是编译链接后产生的可执行文件。
ilk文件 增量编译(incremental linking)
取消增量编译可以不生成这种文件,对于大工程来说可能会变慢。
最后摘抄一段话
一般情况下,如果我们要把源码共享到github中,只需要提交工程相关的配置文件,不提交用户个人偏好相关的配置文件。所谓的个人偏好相关,是指根据用户个人的VS使用习惯而保存的配置信息,比如选择了查看所有文件选项,打开了某一个文件。而工程相关的配置是指工程建立相关的信息,不受用户偏好的影响,比如解决方案的名字是什么,这个解决方案下面有哪些project。所以,我们只需要上传sln配置文件、vcxproj和vcxproj.filters配置文件就可以了,当然还包括源码。
本文参考链接:
Visual Studio 2017工程项目的几个重要文件解析
如何让自己编好的程序在其他电脑上运行
两种模式:Debug与Relaese的区别
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
参考链接:百度百科
发布可执行程序
VC2013 默认编写的 .exe 使用动态链接方式链接的运行时库,所以,编写的程序要在别的电脑上运行,需要在其它电脑安装 VC2013 的运行时库,然后就可以完美运行你的 .exe 程序。
当然,如果你觉得安装运行时库很麻烦,你可以用静态链接的形式编译你的 .exe 程序。
中文版 Visual Studio 2013 的操作方法:
打开 Visual Studio 2013,创建 Win32 控制台应用程序(或者 Win32 项目)。
编写程序。
项目编译模式默认分为 Debug 和 Release 两种模式。Debug 模式带有各种调试信息,方便排查错误,使用的调试版本库。Release 模式删除了调试信息,使得编译的文件更小,执行速度更快。因此,在调试程序的时候,要用 Debug 模式。在调试完毕需要发布程序的时候,用 Release 模式。两种模式有不同的编译设置,我们现在需要将完成的程序发给别人,因此需要将项目设置为 Release 模式。
在 解决方案资源管理器 区域中,选中你的 项目(通常第一行是 解决方案,第二行是 项目),右击,选 属性。
左侧类别中选择“配置属性 -> C/C++ -> 代码生成”,右侧将“运行时库”设置为“多线程(/MT)”。
如果你希望你的程序可以运行在 WinXP 中,还需要设置“配置属性 -> 常规 -> 平台工具集”为“Visual Studio 2013 - Windows XP (v120_xp)”。
编译程序。在项目文件夹的 Release 文件夹里面,可以找到最终编译的 .exe 文件,拷贝出来即可在别的电脑上运行。
采用上面的方法就可以发布Release模式的exe可执行文件,可以拷贝出来在其他电脑上运行。
参考链接:慢羊羊村长的博客:使 VC2013 编写的程序运行在其它电脑上
VS字符集的问题
在VS里面右击项目名称,最后一项是”属性“,点进去就可以看到字符集设置的问题。
主要有两种选择,一种是Unicode字符集
,另一种是多字节字符集
。
Windows是使用两种字符集:ANSI 和 Unicode编码。
ANSI是通常使用的单字节处理方式,所有字符都通过一个字节进行表示,这样对于处理中文这样的双字节字符非常不友好。
在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7 bits字符集的基础上加入了一些特殊符号例如制表符。
后来,由于各国语言的加入,ASCII已经不能满足信息交流的需要,因此,为了能够表示其它国家的文字,各国在ASCII的基础上制定了自己的字符集,这些从ANSI标准派生的字符集被习惯的统称为ANSI字符集,它们正式的名称应该是MBCS(Multi-Byte Chactacter System,即多字节字符系统)。这些派生字符集的特点是以ASCII 127 bits为基础,兼容ASCII 127,他们使用大于128的编码作为一个Leading Byte,紧跟在Leading Byte后的第二(甚至第三)个字符与Leading Byte一起作为实际的编码。这样的字符集有很多,我们常见的GB-2312就是其中之一。
Unicode编码是双字节编码。
由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,提出了Unicode字符集,它固定使用16 bits(两个字节、一个字)来表示一个字符,共可以表示65536个字符。将世界上几乎所有语言的常用字符收录其中,方便了信息交流。标准的Unicode称为UTF-16。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。注意UTF-8是编码,它属于Unicode字符集。Unicode字符集有多种编码形式,而ASCII只有一种,大多数MBCS(包括GB-2312)也只有一种。Unicode的最初目标,是用1个16位的编码来为超过65000字符提供映射。但这还不够,它不能覆盖全部历史上的文字,也不能解决传输的问题 (implantation head-ache’s),尤其在那些基于网络的应用中。已有的软件必须做大量的工作来程序16位的数据。因此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分,例如,在UTF-8和ASCII中,“A”的编码都是0x41.UTF-16和UTF-32分别是Unicode的16位和32位编码方式。考虑到最初的目的,通常说的Unicode就是指UTF-16。
两种编码集推荐使用Unicode编码:
(1) 可以很容易地在不同语言之间进行数据交换。
(2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。
(3) 提高应用程序的运行效率。
以上引用的内容均来自博客:Unicode字符集和多字节字符集关系,此外博客还有许多内容可以学习哦~
C++ _T()与L宏
然后就又关于字符串保存的问题,有两种方式,一种是 _T( )
的形式,另一种是 L" "
的形式。
1 |
|
先暂时忽略TCHAR
,上面的代码是两种字符串保存的方式。
当工程是Unicode编码时,_T将括号内的字符串以Unicode方式保存;
当工程是多字节编码时,_T将括号内的字符串以ANSI方式保存。
关键字“L”,则是不管编码环境是什么,都是将其后面的字符串以Unicode方式保存。
Unicode字符是LPCWSTR
ASCII字符是LPCSTR
通过强制转换是无法完成的,需要用_T()和L()来完成转换
参看博客:C++ _T()和L()宏
各种字符类型😱
上图来自博客:C++字符类型总结区别wchar_t,char,WCHAR emmm,就是有非常丰富的类型。具体内容可以参看超链接里的那篇博客。
VS快捷键
多行注释:选中,然后Ctrl+K,然后Ctrl+C即可注释。
取消注释:选中,然后Ctrl+K,然后Ctrl+U即可取消注释。
VS使用中碰到的问题
模块对于 SAFESEH 映像是不安全的。
解决方法:属性 –> 链接器 –> 命令行,然后在其他选项这个框中,填入/SAFESEH:NO
,就好了。
提示函数过时或者不安全
一种方式是将函数修改为VS建议的函数。
另一种方式是添加_CRT_SECURE_NO_WARNINGS
来让VS忽略这些问题,一种添加是在文件开头添加宏#define _CRT_SECURE_NO_WARNINGS
,另一种方式是在属性页 –> C/C++ –> 预处理器 –> 预处理器定义,添加_CRT_SECURE_NO_WARNINGS
即可。
VS工具 —— 开发人员命令工具提示符
点击打开,然后切换路径到达你CPP文件所在的路径。
1 |
|
使用cd命令切换,使用dir命令查看当前路径下的文件。
输入命令:cl /d1 reportSingleClassLayout类名 "文件名.cpp"
1 |
|
注意类名与前面一串英文之间没有间隔。
- 这段命令可以查看在”11 多态.cpp”这个文件中,类Cat的构造。
1 |
|
而Cat的实际定义为:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!