目录
概述
安装Visual Studio
下载引导安装包
在线安装(推荐)
使用Visual Studio进行开发
创建项目
配置项目
项目 VS 解决方案(重要)
命名
完成项目创建
创建源文件
编写代码
VS项目目录的说明(补充)
HelloWorld程序的注意事项(重点)
多项目的解决方案如何启动?
其他补充
更好用的代码提示功能
查看或修改C语言版本
修改启动快捷键
选择启动项目的插件
固定当前项目为启动项目
VS的一些快捷键
配置代码模板(必做)
概述
对于一名C语言程序员而言,进行C语言程序的开发一般需要一个文本编辑器加上一个编译器就足够了。但为了方便起见,我们选择使用集成开发环境——Visual Studio(简称VS)。
什么是集成开发环境?集成开发环境(Integrated Development Environment),也普遍简称IDE,指的是一个提供用于软件开发的全套工具的环境。这些工具通常包括代码的文本编辑器、编译器、调试器,以及其他用于简化软件开发过程的工具和库。
IDE能够让开发者在一个统一的界面下进行代码编写、调试、测试等多种任务,从而提高效率。
一些非常著名的IDE:
- Java:Eclipse、MyEclipse、IntelliJ IDEA
- Python:PyCharm
以上是一些语言专用的IDE,像我们今天要讲的Visual Studio以及它的好兄弟Visual Studio Code则可以通过安装插件,扩展等方式,理论上作为所有语言的集成开发环境。
其中VSCode作为一个轻量级的编辑器,它更适合用于开发前端、脚本开发等场景。
VS则功能更强大,更适用于处理大型项目。VS是比较常见的C/C++开发使用的IDE。
最后,我们要强调的是无论使用什么IDE还是其它编辑器,归根结底都只是工具,工具的目的是提升效率,而不是根本。
到了Linux阶段以及很多公司当中,我们都会直接在一个文本编辑器中编写C语言代码,所以大家也不要太过于依赖VS。
安装Visual Studio
下面讲一下如何安装VS,按照步骤完成即可。这里提供两种方式安装:
- 在线引导安装
- 离线安装
建议优先选择第一种安装方式,两种方式所需要的安装文件都可以在百度网盘中获取:
链接:百度网盘 请输入提取码
提取码:mu6f
下载引导安装包
引导安装包可以从官网下载:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux
选择下载社区版Community即可
图 1. VS下载引导安装包
如果是Mac笔记本,可以选择下方的Mac版本:
图 2. VS下载引导安装包-Mac版
引导安装包直接双击打开,即可开始VS的安装。
在线安装(推荐)
双击引导安装包后,就会进入工作负荷以及安装位置的选择:
工作负荷选择(也就是选择特定开发任务的工具组件集合):
直接按照图示中选择C++桌面开发即可,其他的不要选择。
安装位置选择:
建议将三个路径放在同一级目录下,这样便于管理,可以参考图片中给出的路径。
建议安装目录不要放在系统盘下,VS作为IDE会占用较多磁盘空间。
上述设置完成后,点击安装即可。安装过程会下载较多资源,请耐心等待。
此过程需要连接微软服务器进行在线安装,通常情况下即便不挂梯子也能正常完成安装。
- 安装完成后,建议重启电脑。
注意事项
- 安装完成后,VS一般不会自动创建桌面快捷方式,可以在开始菜单中找到VS,点击启动。建议将它发送桌面快捷方式或者钉到任务栏,后续一段时间我们会经常使用VS。
第一次启动VS,会提示登录微软账号,这一步相当于激活VS。建议登录,如果没有微软账户,建议注册一个。
- 如果在线安装失败(比如碰到始终卡顿在某个进度,或者直接失败),这是微软服务器的问题,此时可以考虑离线安装VS。
使用Visual Studio进行开发
好了,到此你已经成功安装了VS,距离成为一名真正的C程序员又进了一大步。
下面我们来简单介绍一下如何使用VS进行开发,写出我们第一个C程序的演示代码——HelloWorld!。
创建项目
第一次打开VS,界面如下图所示:
图 9. 第一次打开VS的效果图
推荐直接选择"继续但无需代码",然后就进入了VS主界面:
图 10. VS主界面
注:初次进入还有一个新特性提醒界面,已经被我关闭了。
点击VS左上角菜单栏的"文件 --> 新建 --> 项目"
图 11. 使用VS创建项目
然后进入创建新项目的选择,选择创建"控制台应用",因为我们程序的输出结果要依赖于控制台,所以创建控制台应用。
图 12. 创建控制台应用
随后就进入了创建新项目的配置页面:
图 13. 配置新项目页面
到这一步就是整个创建项目的流程,但最后一步"配置新项目"我们需要详细谈一谈。
配置项目
上图的配置页面中可以看到,我们主要可以调整三个选择:
- 项目名称。
- 位置。
- 解决方案名称。
我们先重点来讲一下VS当中项目(project)和解决方案(solution),理解它们之间的关系是使用VS的一个重点。
项目 VS 解决方案(重要)
解决方案:
解决方案是VS当中进行代码开发的顶层结构,它是一个或多个项目的容器。用于协调多个项目之间的关系和依赖性,尤其是在大型应用程序开发中。解决方案不仅仅是项目的简单列表,它还包括项目之间的依赖关系、编译顺序以及其他元数据。
解决方案的文件夹下通常会自动生成一个扩展名为.sln的文件,来保存这些项目之间关系的信息。
项目:
项目是一个C程序构建过程中的基本组织单元。项目中会包含:源代码文件、资源文件(如图片或数据文件)、配置信息文件等。
通俗的说:
VS中的一个项目是进行开发的基本单元,一个解决方案至少有一个项目,也可以包含多个项目,这些项目可能相互依赖。解决方案会管理这些多个项目的关系。
如果你熟悉Java开发,那么可以使用IDEA和VS做一个类比:
- IDEA的module(模块)是开发的基本单元,project(工程)是模块的容器,一个工程最少有一个模块,但也可以有多个模块。
- VS的项目是开发的基本单元,解决方案是项目的容器,一个解决方案至少有一个项目,但也可以有多个项目。
命名
搞清楚它们之间的关系后,就要稍微浅谈一下命名了:解决方案和项目应该如何命名呢?
首先,我们要说一个大的原则,以后大家无论进行什么语言的程序开发,在遇到命名时,都一定会存在一个大前提:"简洁明了、见名知意"!
也就是说,这个命名应当明确表达功能和作用,这是最重要的原则。
其次,一般来说,名字都应该由合法的英文单词组成,不应出现中文或者中文拼音。
最后,解决方案和项目命名的普遍约定是:
- 采用大驼峰命名法(也叫帕斯卡命名法)。每个单词的首字母都大写,包括第一个单词,各个单词之间直接连接不用加下划线等符号。例如:FirstName、MyProgram等。
- 尽量避免出现空格,点、横杆等特殊字符。命名仅由英文字符和数字组成。
最后,关于命名并没有强制的一定的约束,具体还是要看各公司各研发单位的习惯而定。上面给出的只是大家普遍遵守的一些约定。
注意事项
为了让大家更清晰的看代码,上课时我会把解决方案、项目的命名前带上序号,比如:
- "00_HelloWorld":第一个项目,这个项目叫HelloWorld。
- "50C_Day01":第50期,C语言部分内容的第一天。
但一般而言,这种序号在实际开发中不会使用。
完成项目创建
上面的所有内容都了解后,就可以完成一个项目的创建了,大家参考我的命名和配置:
图 14. VS项目创建配置图
具体的解释都已经在图中贴出了,设置完成后,点击创建即可完成项目创建。
创建源文件
完成项目创建后,还需要在项目下创建C语言源文件,在一个C语言的源文件当中才能够开始写C语言代码。
点击创建项目后,首先你会直接进入以下页面:
图 15. VS项目主界面-HelloWorld
VS会默认创建一个"HelloWorld.cpp"文件,这是一个C++源代码文件,但我们学习的是C语言,所以我们可以直接删除这个文件。
然后"右键点击源文件 --> 添加 --> 新建项",
图 16. VS新建项
此时可能会弹出以下两种窗口:
图 17. 新建项选择-情况1
图 18. 新建项选择-情况2
无论出现哪一种情况都一样,直接修改名字为"xxx.c",即可在源文件下面创建一个C语言源文件。
其中"xxx"代表此源文件的名字,关于源文件的命名,建议大家采取以下策略:
- C语言源文件通常以".c"结尾。
- 见名知意,使用合法的英文单词。
- 单词字母全部小写,如果文件名由多个单词组成,通常使用下划线"_"来分隔这些单词。
- 不要出现下划线以外的特殊字符。原则上只使用下划线、英文字母和数字作为命名且不要用数字开头。
举几个例子:
- a.c
- main.c
- hello.c
- hello_world.c
- ...
.c和.cpp的区别
在VS当中,用.cpp写代码会使用C++编译器来编译代码,遵循C++语言标准。
而使用.c写代码会使用C编译器来编译代码,遵循C语言标准。
大家都知道C++就是以C语言为基础扩展而来的编程语言,C++是兼容C语言的。所以理论上来说,用C++编译器来编译C语言代码,也是可以照常编译执行的。
但我们要注意的是:
- C++并不是完全兼容C语言的,C语言中存在极少的某些语法并不被C++支持(虽然这些语法不常用)。
- C++相比C语言增加了很多新特性,这就导致C++的编译器会执行更严格的编译检查。所以如果用C++编译器编译C语言代码,需要让你的C语言代码反过来符合C++规范。这有时会限制你编写C语言程序。
- C++最初确实是以C语言为基础设计的,但随着时间的推移,两者已经发展成为两个独立的、具有各自特性和用途的编程语言。希望大家不要把这两门语言混为一谈。
总之,即便大多数情况下用.cpp写C语言代码是没问题的,但为了避免踩坑出问题,也为了谨记C不是C++,还是请大家用.c来编写C语言代码,安全省心。
编写代码
创建完毕.c文件后,双击打开此文件,然后编写代码。
在本小节中,我们只管写代码运行,下节我们再讲这些代码的含义。
代码块 2. 一个简单的hello world案例
#include <stdio.h> int main() {printf("hello world!\n");return 0; }
代码编写完成后,你可以使用以下两个按钮来启动程序(在VS主界面的上方菜单栏):
图 19. VS-启动程序的两个按钮
这两个按钮的差别是:
- 点击按钮1"本地 Windows 调试器"启动程序,此时程序会以Debug模式启动。
- 点击按钮2"开始执行(不调试)"启动程序,此时程序会以正常模式启动。
关于Debug模式和正常启动程序的区别,后续课程会详细讲解。在日常的开发中,我们更建议大家使用按钮1,以Debug模式来启动程序。
点击启动程序后,若正常运行不出意外,你会看到控制台如下图所示:
图 20. VS-HelloWorld运行结果
当然,如果出问题大概率就是代码中的单词拼错了,某一句代码漏了分号等问题。请检查一下VS的错误输出列表,修改代码即可!
注意事项:
请大家把编译器的版本从默认的x64(64位)改为x86(32位)。这么做的目的主要是为了上课方便以及规避一些可能存在的坑。
即:
- 无论点击哪个按钮,以什么模式启动程序,都需要经历编译源代码,生成可执行程序,执行可执行程序的过程。(这个过程后续会详细讲解,现在你只需要知道代码被编译执行就可以了。)
图 21. 选择32位平台编译器来编译代码
VS项目目录的说明(补充)
在VS的解决方案资源管理器当中,我们可以清晰的看到一个项目下面又分了几个"层级",如下图所示:
图 22. VS项目的层级关系
我们可以在解决方案资源管理器当中选择一个项目,然后右键选项点击"在文件资源管理器中打开文件夹"。此时打开的就是此项目在本地的文件目录。
如下图所示:
图 23. VS项目目录
我们可以发现这个项目的目录下并没有我们想象的:
- 头文件目录文件夹
- 源文件文件夹
- 资源文件文件夹
- ...
这是因为:VS的一个项目当中的"外部依赖项"、"头文件"、"源文件"等并不是一个物理目录,只是一个逻辑上的分类。实际上它们直接物理存储在同一个目录下!
此目录下存储的诸如.vcxproj
作为后缀名的文件,实际上就是存储了这些同一个目录下的项目文件的关系。
所以就VS而言,解决方案,项目的关系可以用下图来描绘:
图 24. VS解决方案、项目组织图
试想一下,如果在VS项目的"头文件"下面创建一个"hello.h",如下图所示:
图 25. 创建一个新的头文件
这两个文件在实际的项目目录下,是如何存储的呢?
答案很简单,直接存储在同一目录下。
HelloWorld程序的注意事项(重点)
对于一个简单的HelloWorld程序,代码如下:
代码块 3. 简单的HelloWorld-C程序
#include <stdio.h> int main() {printf("hello world!\n");return 0; }
请大家注意以下细节:
- "#include"和"<stdio.h>"之间一定要有一个空格!!!
- 代码中"int mian(){}"被成为main函数。对一个C语言程序而言,main函数(也叫主函数)是具有唯一性的,因为它是程序的入口,所有C语言的程序都会从main函数开始执行。
那么对于VS而言,若一个项目中出现了多个main函数,程序该从哪里执行呢?显然VS是不可能自己搞清楚这个事情的。
所以VS不允许一个项目中出现两个main函数,如果希望写两个main函数,请创建多个项目!
多项目的解决方案如何启动?
由于一个项目只能存在一个main函数,所以如果希望多个main函数共存,就需要创建存在多个项目的解决方案。
我们已经知道这个按钮的作用是:
图 26. VS-启动C程序
编译代码,生成可执行程序,然后运行这个可执行程序。
那么如果此解决方案有多个项目,又是什么情况呢?
很简单,由于每个项目中最多只有一个main入口函数,那么VS会编译每一个项目中的代码,为每一个项目生成一个可执行文件。也就是会生成多个可执行文件。
那么问题又来了,多个可执行文件最终执行哪一个呢?还是时候全部都执行?
观察下图中同一个解决方案下的,两个项目的项目名,它们有什么区别?
图 27. 多项目解决方案
很显然,第一个项目HelloWorld的名字是加粗的。这种加粗意味着项目HelloWorld是启动项目,点击启动按钮,会执行该项目生成的可执行文件。
VS也提供了修改启动项目的功能,右键单击某个项目会出现如下图所示的菜单:
图 28. VS设置启动项目
设定启动项目后,点击按钮就会运行对应项目中的main方法。
除了设置固定的启动项目外,VS还可以直接将启动项目设置为当前打开的项目,如下所示:
图 29. VS设置启动项目为当前项目
两种方式,大家自行选择一种即可。
其他补充
VS在实际使用过程中,可以进行一些设置,使得它更好用。这一部分内容都不重要,也没什么必须的设置,大家感兴趣看一下,觉得无所谓就不要看了。
更好用的代码提示功能
使用VS写代码时,若想选择代码提示进行输入,需要按一下Tab键再回车,这未免麻烦了点,我们可以进行以下设置,使得可以直接回车选择代码提示:
- 打开 Visual Studio。
- 点击菜单栏中的"工具 --> 选项"。
- 在左侧的导航树中,定位到"文本编辑器 --> C/C++ --> 高级"。
- 在右侧的设置列表中,找到与 IntelliSense 相关的设置。
- 将"主动提交成员列表"从默认设置的False改成True。
图 30. 更好用的代码提示功能-设置界面
设置完成后,代码提示出现时就可以直接回车选择生成代码了,这样会更方便一些。
查看或修改C语言版本
要查看或修改在Visual Studio中使用的C语言版本:
- 打开你的项目。
- 右键点击项目名,选择 属性。
- 在左侧导航窗格中,选择 配置属性--> 常规
- 查找与C语言标准相关的选项(C语言标准),并根据需要进行调整。
图 31. 项目属性当中的C语言标准
那么上图中的MSVC是什么东西呢?
C语言标准中的旧MSVC是什么?
默认情况下,VS采用(旧MSVC)作为C语言的版本。那么MSVC是什么呢?
MSVC(Microsoft Visual C++)是微软公司自己开发的C、C++语言编译器套件,可以用来编译C或者C++程序。但它有自己的一套特性和扩展,并不完全遵循官方标准。
比如MSVC中的C语言编译器,它支持C90的全部特性和部分C99的特性,几乎不支持C11等更高版本。
在当下我们的学习中,这个编译器已经够用了,因为我们只学习C语言的基本概念语法。
MSVC存在一些特定于Windows平台的扩展和特性,这在某种程度上限制了其跨平台性,而且它对C语言的支持并不好。
为了更好的实现跨平台性,尤其是对Unix/Linux操作系统的支持,我们在后续会使用GCC作为编译器。
GCC(GNU Compiler Collection即GNU编译器套件),是Unix-like平台下最常用的C/C++语言编译器。它开源免费,性能优良,完整支持官方标准,扩展性和跨平台性好。
修改启动快捷键
点击菜单栏中的"工具 --> 选项",打开设置选项卡。按照下图输入"调试.启动"搜索找到该快捷键,然后即可进行修改。
图 32. 修改调试启动快捷键
默认的Debug调试启动快捷键是F5,我一般都会修改成F1。
同样的操作,搜索"调试.开始执行不调试"可以找到正常启动快捷键,然后也可以进行修改。
图 33. 修改正常启动快捷键
默认的正常不调试启动快捷键是Ctrl + F5,我一般都会修改成Ctrl + F1,但这个快捷键基本不会使用,改不改都不太所谓。
如果你想修改VS的其它快捷键,也可以仿照该案例去完成。
选择启动项目的插件
在使用VS编写C代码的过程中,毫无疑问需要经常创建多项目解决方案,此时频繁手动切换启动项目是比较麻烦的。所以推荐一个可视化选择启动项目的插件:
SwitchStartupProject
大家可以在"扩展--管理扩展"的"联机市场"中搜索此插件安装,然后重启VS即可。
安装成功后,主界面菜单栏下就会多一个下拉框用于选择当前启动项目,这个插件还是比较方便的,推荐安装。
图 34. 选择启动项目-插件
注:此插件偶尔会有bug无法选择启动项目,此时重启解决方案即可解决。
固定当前项目为启动项目
拥有上面一个插件后,虽然让我们的VS启动项目操作变得简单很多了,但实际还是不太方便的,还是需要每次都点击选择启动项。
实际上我们更希望,点击哪个项目中的
main.c
文件,哪个项目就是启动项目。VS支持这样的设置,参考下列步骤设置:点击菜单栏中的"工具 --> 选项",打开设置选项卡。按照下图输入"生成并运行"搜索找到对应选项框,勾选它即可。
图 35. 更好用的启动项目设置-图示
这样设置后,你每次创建的新的解决方案,都会固定使用当前选定的项目作为启动项目。
VS的一些快捷键
VS常用快捷键:
Ctrl + L: 快速删除当前行
Ctrl + D: 快速复制当前行到下一行
Ctrl + 空格: 强制显示代码提示
Ctrl + Alt + L: 打开解决方案资源管理器。
Ctrl + K + D(按住Ctrl后再按K和D两个键位): 标准格式排版整个文件中的代码
Ctrl + Shift + /:快速注释以及释放注释。
配置代码模板(必做)
如果每次新建项目时,都选择"空项目"或者"控制台应用",那么接下来就需要自己动手新建一个".c"文件编写main函数代码,这是比较麻烦的。所以建议大家配置一个代码模板,这样便于大家快速创建一个C程序骨架。
按照以下流程走:
1.创建一个标准的C项目
- 打开Visual Studio
- 新建一个C++"控制台应用"项目。
- 在解决方案资源管理器中,删除所有默认生成的
.cpp
文件。- 添加一个新的
.c
文件,命名为main.c
。- 在
main.c
文件中,输入你想要的默认内容。这里推荐一个"main.c"文件的代码内容:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>/**/int main(void) {printf("hello world!\n");return 0; }
其中:
- "#define _CRT_SECURE_NO_WARNINGS" 是微软的MSVC平台下特有的宏定义,用于禁用运行时编译警告。
- "#include <stdio.h>"包含头文件,这样就可以使用"printf"等函数。
导出项目为模板
- 在VS的文件菜单上选择“项目 --> 导出模板”。
- 选择“项目模板”,然后点击下一步。
- 输入模板的名称、描述等相关信息,然后点击完成。(注意模板的名称必须是英文的,不能用中文)
- 记住你输入的模板的名字,方便后续创建项目时使用。
图 36. 导出项目为模板-图
使用新模板创建项目
- 当你下次新建一个项目时,你可以在模板中下拉找到你创建的项目模板。
- 选择你刚才保存的模板,输入你的项目名,并创建。
- 这个新项目会自动生成一个
main.c
文件,内容和你在模板中设置的完全相同。你还可以将你的模板固定在项目创建的左页面,比如下图:
图 37. 固定项目模板到页面
这样下一次你就可以更快的找到你创建的模板了。
修改项目模板的代码
在很多时候,我们需要随着学习进度来修改模板的代码,比如我想要在模板当中添加一些宏定义或者头文件包含指令。首先你需要找到模板的.c文件文件存储的路径,它一般在:
C:\Users(用户)\(用户名)\Documents(文档)\Visual Studio 2022\Templates\ProjectTemplates
比如在我的电脑当中,这个文件就在:
图 38. 模板代码文件位置
此时打开这个模板文件,修改当中的main.c
文件即可:
图 39. 修改模板代码文件
修改后,再次使用VS新建项目,就可以看到模板代码已经发生了变化。(旧项目没有任何影响)
以上,就完成了VS项目模板的配置和使用。