C++:VS2017基本操作、番茄助⼿的重构功能以及C++的项
⽬⼯程基本配置
⼀、VS2017 IDE环境基本配置
窗⼝布局:在视图中选择“类视图”、“资源视图”、“解决⽅案资源管理器”、“输出窗⼝”,以及番茄助⼿提供
的“VAOutline”。好⽤的插件有⼀下⼏个:
1、VS2017上使⽤番茄助⼿的说明:
番茄助⼿下载地址[亲测能⽤]:
其中,新版的番茄助⼿添加了重构功能Refactor,真的⽆⽐强⼤,让⼈欲罢不能。⾸先看⼀下位置
具体介绍:
add include:添加头⽂件,当编译后提⽰“未定义类型”时直接右键类型名,refactor→add include。
create implementation:添加实现,当在头⽂件中声明好⽅法后,想到cpp⾥写实现,直接贴过去,是可以但还是要做部分修改。同样是右键该⽅法,refactor→create implementation。
create declaration :添加声明,create implementation的逆过程,如果你习惯先写实现再声明的话,⽤这个很⽅便。
document method:⽅法说明,⽤这个可以在⽅法上⾯写上该⽅法的作⽤域,参数,返回值等主要信息,⼀⽬了然
move implementation to source file:移动实现到头⽂件。把不该内联的复杂函数实现写到头⽂件⾥了?没关系,直接
refactor→cmove implementation to source file⾃动移动到cpp⽂件中
rename:重命名,发现⾃⼰之前写的代码命名(变量名,函数名,包括类名。。)不规范,⼜不想⼀个个改?refactor→rename⾃动把所有相关的部分改过来,包括注释(可选)。值得注意的是这个不是直接简单的查替换,番茄助⼿会只改涉及到该类或者该类继承类的变量,⽽不会改其他的同名变量。(了很久这个功能,终于让我等到了o(╥﹏╥)o)
encapsulate field:变量封装,写了个private的成员变量,发现外⾯要⽤到,直接就移到public⾥⾯来?太容易妥协了吧,也不满⾜C++封装的原则。同样右键refactor→encapsulate field。set,get⼀次搞掂
changs signature:改变签名(不知如何翻译),rename的加强版,如果不只是名字改了,返回值类型甚⾄参数表都改了,怎么办,重写?不⽤,va的changs signature照样可以⼀次性解决。
2、Astyle插件(从VS2017的扩展中即可直接安装)
将我的设置列于下
--style=kr --indent=spaces=4 --align-pointer=name --align-reference=name --pad-oper --pad-header --keep-one-line-statements --convert-tabs --mode=c
对应的对话框选择如下
3、VSCode快捷键
因为以前VC6.0的⼯程常⽤VS Code进⾏编辑,因此将VS2017的快捷⽅式也改成VSCode的⽅式:进⼊键盘->“应⽤⼀下其他键盘映射⽅案”选择"Visual Studio Code"。此模式下,常⽤的VS2017快捷键如下
快捷键效果
CTR+,启动上图所⽰的设置画⾯
CTR+K,CTR+O c/cpp⽂件切换
CTR+F搜索
CTR+⿏标滚轮字体⽅法/缩⼩
CTR+K,CTR+C单⾏注释
CTR+K,CTR+U取消单⾏注释
CTR+W关闭当前窗⼝
CTR+K+W关闭所⽤窗⼝
CTR+K+0/J完全折叠/展开代码
F12到定义
ALT+F12不跳转打开定义
ALT+⽅向键左键/右键到上⼀次/下⼀次光标
选中代码按tab键代码向右缩进
选中代码按shift+tab键代码向左缩进
CTR+SHIFT+{,CTR+SHIFT+}快速定位到另⼀半括号
还有⼏个调试很好⽤的快捷键
按键效果
F5启动调试/调试时继续运⾏直到遇到下⼀个断点
CTR+F7编译
F9插⼊断点/清除断点(VS2017断点可以设置条件很⽅便)
F10单步前进,但遇到函数不会进⼊
F11单步前进,遇到函数会进⼊
Shift+F11前进直到当前函数返回
4、折叠代码专⽤宏
当代码很长,我们希望将实现某⼀段实现具体功能的代码折叠起来,可以使⽤下⾯的宏
#pragma region ⽤户登录,要求输⼊⽤户名和密码,三次输⼊错误则关闭程序
...//登陆功能具体代码
#pragma endregion
代码折叠后效果如下
5、调出控制台
5.1. printf直接打印
以MFC程序为例,进⼊APP类的Initlnstance()函数,在函数末尾,retrun之前,加⼊以下代码
AllocConsole( ); //创建⼀个控制台窗⼝
freopen("CONOUT$", "w", stdout);
使⽤freopen()函数的好处就是在需要打印信息的时候,不需要获得控制台的句柄,直接输出信息就好。之后在需要打印信息的地⽅打印即可(可以是整个程序任何地⽅),最好⽤printf函数即可,这样也不需要额外的头⽂件了。如下
printf("%d",500);
5.2.指定句柄打印
如果调⽤的第三⽅库的函数也有printf函数,⽽且想要控制台上只显⽰我们想要打印的数据的时候,就需要指定控制台的句柄,加⼊函数的位置同样是在Initlnstance()函数⾥边
AllocConsole(); //创建⼀个控制台窗⼝
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出句柄
打印的语句是
CString msg = "Hello\n";
WriteConsole(hOutput, msg, strlen(msg), NULL, NULL);//向控制台窗⼝写⼊信息
但是如果想在其他地⽅使⽤句柄hOutput,就需要将其设成全局变量了。如果想要换⾏,只需要在内容中加⼊“\n”就可以了
6、删除代码中的所有空格
在替换窗⼝中选择“正则表达式”,输⼊“^\s*(?=\r?$)\n”,替换为空就⾏了
⼆、C++的项⽬⼯程基础配置(路径配置、各种⽣成⽂件说明以及路径宏定义说明)
1、添加头⽂件所在的⽬录
依次打开“项⽬——属性——配置属性——C++——常规——附加包含⽬录”中加⼊所有的路径。 需要注意的是:
(1)路径必须指向头⽂件所在的⼦⽂件夹,⽽不能直到⽗⽂件夹就结束
(2)每个路径不需要加上双引号,输⼊了之后,vs2008会⾃动加上双引号,如果⾃⼰加可能vs2008⽆法识别双引号
(3)如果是多个路径,路径直接⽤“;”隔开。
2、添加库(libs)⽂件⽬录和lib⽂件名
除了头⽂件以外,也需要告诉编译器,类在哪⾥实现的,即封装类的链接库在哪⾥,这样程序才能执⾏⼯具包中的函数。⾸先需要将链接库的路径输⼊vs2008,即添加库(libs)⽂件⽬录。具体步骤:
(1)依次打开“项⽬——属性——配置属性——链接器——常规——附加库⽬录”中加⼊链接库的路径。
(2)添加所需“库⽂件”名称,即添加编译所需要(依赖)的 lib ⽂件 。在“项⽬——属性——配置属性——链接器——常规——输⼊——附加依赖项”中加⼊链接库的名字,多个lib⽤空格隔开。
发现⼀个很奇怪的现象,当.c/.cpp所在⽂件夹A下有*.lib,填⼊的附加库⽬录B也有*.lib,那么编译的时候会优先选择A下的*.lib。所以如果编译的时候出现第三库链接的⼀些问题,⼀定要确保程序链接的是正确的*.lib⽂件visual studio和vs code的区别
3、配置输出路径和⽬标⽂件名、中间⽬录
(1)配置输出路径(⽣成的exe或dl的路径,同时ilk⽂件也会⽣成到此):依次打开“项⽬——属性——配置属性——常规——输出⽬录”。添加需要输出的⽬录,记得⼀定是以“\”结尾。
(2)如果是⽣成库⽂件的项⽬,还需指定lib⽂件的⽣成路径:
(3)⽬标⽂件名也要在这⾥修改,字符集改成“使⽤多字节字符集”也在这个界⾯。
(4)中间⽬录也在此页,⽣成的obj⽂件,预编译头,预编译相关的idb及pdb,buildlog都会在这⾥。idb 是系统⽣的成的状态信息,可以加速随后的编译,pdb 包含调试信息
4、其他⽂件
(1)Linker->Debugging->Genrerate Program Database File,输出的pdb⽂件
(2)Linker->Advanced->Import Library 指⽰了将随同dll⽣成的lib⽂件输出的⽂件名和路径
(3)配置属性->浏览信息->所有选项中的“输出⽂件”,指⽰了.bsc⽂件输出的⽂件名和路径
5、⽣成的各种⽂件说明
(1)DSW:全称是Developer Studio Workspace,最⾼级别的配置⽂件,记录了整个⼯作空间的配置信息,她是⼀个纯⽂本的⽂件,在vc创建新项⽬的时候⾃动⽣成
(2)DSP:全称是Developer Studio Project,也是⼀个配置⽂件,不过她记录的是⼀个项⽬的所有配置信息,纯⽂本⽂件
(3)OPT:与DSW、DSP配合使⽤的配置⽂件,她记录了与机器硬件有关的信息,同⼀个项⽬在不同的机器上的opt⽂件内容是不同的 (4)CLW:记录了跟ClassWizard相关的信息,如果丢失了clw⽂件,那么在Class View⾯板⾥就没有类信息 (5)PLG:实际上是⼀个超⽂本⽂件,可以⽤Internet Explorer打开,记录了Build的过程,是⼀个⽇志型⽂件 (6)RC:资源描述⽂件,记录了所有的资源信息,在资源编辑器⾥作的修改,实际上都是对RC⽂件的修改 (7)RC2:附加的资源描述⽂件,不能直接资源编辑器修改,只能⼿⼯添加,可以⽤来添加额外的资源 (8)RES:经过资源编辑器编译之后的资源⽂件,以⼆进制⽅式存放
(9)SBR:编译器⽣成的浏览信息⽂件,在代码导航的时候⾮常有⽤,她需要在编译时指定/FR或者/Fr开关
(10)BSC:BSCMAKE.EXE将所有的SBR⽂件作为输⼊,经过处理之后输出⼀个BSC⽂件,在代码导航的时候实际⽤到的是BSC⽂件 (11)ILK:当选定渐增型编译连接时,连接器⾃动⽣成ILK⽂件,记录连接信息
(12)PDB:全称是Program DataBase,即程序数据库⽂件,⽤来记录调试信息,是⼀个相当重要的⽂件,没有他,程序⽆法正常调试
(13)LIB:如果项⽬输出是Dll的话,⼀般会输出⼀个跟项⽬同名的Lib⽂件,记录输出的函数信息 (
14)EXP:同Lib,是跟Dll⼀起⽣成的输出⽂件
(15)PCH:全称是PreCompiled Header,就是预先编译好的头⽂件,在编译时指定/Yu开关时编译器⾃动⽣成6、⽂件路径常⽤的宏
为了项⽬的移植,推荐使⽤相对路径。VS提供了很对的路径宏来代表⽰相对路径。常⽤的如下
$(ProjectDir)即项⽬⽂件(vcxproj)所在的根⽬录$(IntDir)指定的中间⽂件路径 $(OutDir)指定的输出⽬录
$(SolutionDir)
解决⽅案(.sln)所在的根⽬录
$(SolutionPath)
解决⽅案(.sln)的绝对路径名(定义形式:驱动器 + 路径 + 基本名称 + ⽂件扩展名)$(SolutionName)解决⽅案的基本名称
$(SolutionPath)..
解决⽅案的上⼀级
E:\Top7PlusAll\可以⽤“\..”两个点跳到上⼀级⽬录
可以通过如下⽅式查看路径宏在本机对应的绝对路径
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论