建议结合视频阅读哦 ????
Visual Studio 2022 Community 不完全攻略
有问题或者意见欢迎评论 !
1. 下载&安装
Visual Studio Community 是免费使用的.
下载最新版 (目前是 2022 , 一定要去官网下载 ! )
https://visualstudio.microsoft.com/vs/community/
下载完打开 Visual Studio Installer.
- 在安装页面, 左下角可以修改安装位置 (下载缓存可以不保留, 但必须要和本体放在不同的文件夹中).
- 编写基本的 C++ 程序只需勾选 使用 C++ 的桌面开发 这个工作负荷.
- 语言包自行选择. 建议使用英文界面强迫自己学英语.
- 一般都会选择黑暗模式.
- 安装完重启电脑.
- 使用 VS 2022 需要注册一个微软账号.
2. 认识 Visual Studio
2.1. 创建一个空项目
Create a new project => Empty Project => 勾选 Place Solution and Project in the same directory ( VS 的目录结构比较混乱, 稍后会介绍更改的方式).
如果打开不是 Start Window 而是之前打开的项目, 可以进入 Tools => Environment => General, 在 On startup, open: 选项中选择 Start window.
2.2. 选项卡
各个选项卡都是可以拖动.
既可以放大缩小又可以改变位置, 还可以固定或浮动.
一般来说 Solution Explorer 是一个比较重要的选项卡, 如果意外关闭可以在上方的菜单栏重新打开: View => Solution Explore . 你也可以使用快捷键 Ctrl+Alt+L .
2.3. Solution Configuration & Platform
在上方菜单栏默认有 Debug 和 x64 两个选项, 可以分别切换成 Release 与 x86.
Release 模式会自动优化你写的代码, Debug 便于调试.
Release 模式生成的 .exe 文件可以不依赖其他文件在别人的电脑上直接运行, Debug 不行.
x64 和 x86 分别代表在 64 位和 32 位平台下编译运行.
2.3. 两个绿箭头和一个小火苗
从代码到运行程序经历两个阶段
- Compile --- 把一个个 .cpp 文件编译成电脑读得懂的二进制文件 - Ctrl+F7
- Build --- 把一个个二进制文件 link 在一起生成 .exe 可执行文件 - Ctrl+Shift+B
代码的语法错误在 Compile 阶段就能被 Compiler 识别, 但一些 linker 错误要到 Build 阶段会被 linker 识别.
当然, 更多的错误只能靠你自己识别.
- 实心的绿箭头是 Compile + Build + Run(运行生成的 .exe 可执行文件) - F5.
- 空心的绿箭头是跳过一个个调式断点的 Compile + Build + Run(运行生成的 .exe 可执行文件), 这里还没讲到调试, 所有不用深究 - Ctrl+F5.
- 红色的小火苗是 Hot Reload, 简单地说就是在不终止当前的运行进程下, 重新 Compile + Build. 例如在一个循环中, 已经循环了两次, 这时你修改了循环中的部分代码, 然后 Hot Reload, 下一次循环就会以你改完的代码运行.
3. 界面设置
3.1. 滚动条
右键滚动条 => Scroll Bar Options
可以更改滚动条的显示方式.
3.2. 字体
Tools => Options => Enviroment => Fonts and Colors
可以更改字体样式, 大小和颜色.
3.3. 主题
Tools => Theme
4. Hello World !
右键 Solution Explorer 下的 Source Files, Add => New Item...
选择 C++ File, 然后重命名.
注意: 你要创建什么类型的文件就选择什么类型, 不要创建了一个 C++ File 然后在外部改后缀名, 这会导致 linker 错误.
在编写程序的时候, 要注意如下一些快捷键:
- 代码自动补全: Tab
- 注释 / 取消注释选中行: Ctrl+K+C / Ctrl+K+U
- 多行编辑: Ctrl+Alt+LeftClick
- 变量 / 对象 / 类 / ... 重命名: Ctrl+R+R
运行完可能什么都没有, 或者有个黑色窗口闪了以下. 这是正常的, 因为你的程序结束了! 如果你希望程序结束后保持控制台窗口打开, 就在上方点击 Tools => Options => Debugging => 关闭 Automatically close the console when debugging stops .
5. 快捷键设置
Tools => Options => Enviroment => KeyBoard
找到想要做的操作, 在键盘上按出想要基于的快捷键, 查看有没有冲突.
6. 代码风格设置
这里以 C++ 为例.
-
Tools => Options => Text Editor => C/C++ => General
里面有若干设置选项, 其中可能 Automatic brace completion 比较重要 (如果喜欢所有右括号都手动打而不是自动补全的话可以考虑关闭这个选项). -
Tools => Options => Text Editor => C/C++ => Tabs
用来设置 Tab 键是打一个 '\t' 还是 n 个 ' '. 我个人习惯四个空格. -
Tools => Options => Text Editor => C/C++ => Advanced
这里面有很多非常重要的设置选项. 其中关于 IntelliSense 的设置直接关系到自动代码补全. 更改前务必查阅足够多的资料, 并且先保存好先前的设置. -
Tools => Options => Text Editor => C/C++ => Code Style
General: 更改注释格式 / 注释生成方式.
Formatting: 各种格式自定义设置, 比如 { 跟在 函数名同行还是新一行. -
Tools => Options => Text Editor => C/C++ => IntelliSense
VS 2022 新增的 inline hints 设置.
7. 文件目录
前面提到 VS 的默认文件生成目录非常混乱, 右键 Solution Explorer 中的 Project 名, 选择 Open Folder in File Explorer 打开当前项目处在的文件夹.
7.1. 几个文件的说明
正常情况下当前文件夹内会出现这样几个文件:
- .vs 文件夹(隐藏)
- x64 文件夹
- Project1.sln
- Project1.vcxproj
- Project1.vcxproj.filters
- Project1.vcxproj.user
- Source.cpp
这里要说明的是,
-
.sln 文件是一个 Visual Studio project 的入口. 当你想打开一个别人的 project , 不要从 Start Window 打开项目文件夹, 而应该直接运行 .sln 文件.
-
.vcxproj 文件时项目不可缺少的文件. 参考官方文档:
MSBuild is the default project system in Visual Studio; when you choose File > New Project in Visual C++ you're creating an MSBuild project whose settings are stored in an XML project file that has the extension .vcxproj.
因此如果你想要开源 Visual Studio 项目, 除非只想发布源代码, 否则至少应当保留 .sln 文件和 .vcxproj 文件.
-
我们在工程中将 Source.cpp 建立在一个叫 Source Files 的文件夹内, 但是当前的目录里没有这个文件夹. 这是因为这些文件夹其实是虚拟的 Filter (筛选器), 现实中所有文件都被堆在一起. 这其实不是一个很好的文件管理方式. 哪些文件归于哪个 filter 的信息都储存在 .filters 文件内部. 所以如果你的项目不依赖 filter, 开源时可以忽略 .filter 文件.
When Solution Explorer is used to add a file to a project, the filters file (.vcxproj.filters) defines where in the Solution Explorer tree view the file is added, based on its file name extension.
-
.user 文件直接参考官方文档就行了, 储存的是一些断点信息.
A user file (.vcxproj.user) stores user-specific properties, for example, debugging and deployment settings. The vcxproj.user file applies to all projects for a particular user.
-
.vs 文件夹内部储存了 template bar information 以及一些其他内容, 这些都不需要被加入 Source Control.
-
x64 文件夹内部储存了所有的生成文件.
7.2. 更好的文件管理
这里主要分为两部分, 代码文件的管理和生成文件的管理.
所有代码文件都堆在 .filter 文件夹内并不整洁.
在 Solution Explorer 内点击 Show All Files (如果看不到请拖大选项卡), 显示文件夹内确实的情况.
在空白部分右键 => Add , 添加两个文件夹: header 和 source 分别存放头文件和源文件.
右键 source 文件夹 => Add => C++ File. 这样就在 source 文件夹内部添加了一个 .cpp 文件. 你也可以在别的地方新建然后拖动进去.
对于生成文件的管理, 右键 Solution Explorer 中的项目名 => Properties => Output Directory 改为: $(SolutionDir)\bin\$(Platform)\$(Configuration)\
; Intermediate Directory 改为: $(SolutionDir)\bin\intermediate\$(Platform)\$(Configuration)\
. 这样改动, 生成的中间文件和可执行文件就会依据运行环境不同区分开.
8. 调试
在开发大项目的时候, 调试是必不可少的工具. 在调试时请保证处于 Debug 环境而不是 Release 环境 !
8.1. 添加断点
断点顾名思义就是程序运行到这行会停下来 (还没执行这行). 你可以在多个地方添加断点.
8.2. Step into & Step Over
F5 运行程序, 到这行确实停下来了. 接下来想一步步让程序往下走, 可以按 F11(Step into) 或者 F10(Step over). 前者会在调用用户定义的函数的地方跳入该函数; 后者会直接执行完该函数进入下一行. 需要注意的是, Step into 不会跳入由 "<>" 头文件 (标准库) 中定义的函数.
8.3. 在断点间跳跃
当到达一个断点程序暂停后, 再按 F5 就会跳到下一个可能到达的断点 --- 没有后续可能到达的断点就直接运行完程序.
8.4. 调试看什么 ?
这是个好问题. 在调试过程中, 点击上方 Debug => Windows => Locals 可以打开 Locals 窗口监测各变量的数值变化情况. 这是非常非常有用的 --- 只要你又耐心看.
对于指针变量储存的数组地址, Locals 窗口只会显示指针所指唯一元素的地址. 解决方案是 Debug => Windows => Watch 1/2/3/4 打开一个 Watch 窗口, 然后双击 Add item to watch 输入诸如 ptr, 10
, 就能看到 ptr 所指的 10 个元素.
9. 对 C 库函数的兼容问题
部分 C 语言函数在 Visual Studio 中使用会报错, 这是考虑到内存安全问题. 我的建议是, 如果你自己写项目 (一直在 Visual Studio 中写), 那就遵循他的规则使用改进的函数, 比如 scanf_s()
, strcpy_s()
.
如果这是一个开源项目, 可能有别的编译器参与, 就在 Solution Explorer 中右键项目名 => Properties => C/C++ => Preprocessor, 在 Preprocessor Definitions 中添加一条 _CRT_SECURE_NO_WARNINGS
. 这样 (仅在) 当前这个项目中允许了使用原生的 C 库函数.
10. <bits/stdc++.h>
Visual Studio 没有添加这个万能头文件. 实际上除非竞赛, 真正团队项目开发的时候是不会用这个头文件的. 想要使用 <bits/stdc++.h> 需要自己手动添加到头文件文件夹中.
10.1. C++ 标准 & 宏变量 __cplusplus
在 C++ 中定义了 __cplusplus 这宏变量表示当前的 C++ 标准.
在随便一个地方打 __cplusplus 然后把鼠标移上去, 会跳出 Expands to 199711L 这个提示.
在 Solution Explorer 中右键项目名 => Properties => General . 这里面的 C++ Language Standard 可以选择用不同的标准编写 C++ 程序. 但是无论切换到什么标准, __cplusplus 总是 Expands to 199711L . 用微软自己的话说:
Because a lot of existing code appears to depend on the value of this macro matching 199711L, the compiler doesn't change the value of the macro unless you explicitly opt in by using the /Zc:__cplusplus compiler option.
改不改很多时候都没什么差别, 但是 C++ 17 和 20 弃用了若干标准库, 导致如果 __cpluscplus 不扩展到正确数值, <bits/stdc++.h> 会报错.
解决方法如下:
在 Solution Explorer 中右键项目名 => Properties => C/C++ => Command Line , 在 Additional Options 中 添加一句: /Zc:__cplusplus
, 确定即可.
10.2. 添加 bits/stdc++.h
在以下链接下载我修改过的 bits/stdc++.h
随便 inlcude 一个标准库头文件, 鼠标点一下这个头文件, 按 F12 Go To Document, 右键右上角弹出的 tab 标签, 选择 Open Containing Folder . 在这个文件夹内新建一个 bits 文件夹, 再把下载好的 bits/stdc++.h 扔进去, 就大功告成了.