(纯纯搬运+节选)
基于 VS Code + MinGW-w64 的C语言/C++简单环境配置,专致小白
作者: 追远·J
物理学 / 计算机
1,472 人赞同了该文章
- 目录
1.安装 MinGW-w64 编译器套件
2.安装 VS Code 文本编辑器
3.配置 C/C++ 的基本环境
4.编写"Hello World"程序
写在前面。本文虽致力于启蒙小白,但并不能保证每词每句都极度通俗,仍然存在部分标准和概念,限于篇幅难以详解,如果可能,将插入可参阅资料的链接。
数年间多次更新配图,完善措辞,本文力图给出尽可能完备的操作步骤和概念解读。尤其是缺少纯文本编辑器使用经验的同学,务必注意精读细读、逐步实操,避免遗漏步骤或操作错误。粗体文字和引用体段落,以及配图中的文字和上下文,更要注意。
细节在编程工作中极具影响力,小白因背景知识薄弱而经常踩坑实属难免,但错误也是学习的重要途经,学会从错误中找出知识缺口并进一步学习是非常优秀的品质,与诸君共勉。
作者初学 C 语言时选择的编程环境 (软件) 是 Microsoft Visual Studio (即 VS),其功能之完整强大无愧为宇宙第一 IDE (集成开发环境)。但对新手来说,它除了硬盘占用太多外,过于完善的预配置在为小白填了不少新手坑的同时也造了很多新坑(例如默认禁掉了scanf
这类“不安全的函数”),项目工程的结构也相对“独特”。如果你偏爱简约风的编程方式,本文将带你回归 文本编辑器 + 编译器 这一本源,暂且抛下诸多高级的库和调试工具,从最简单的环境配置中理解编程的基本过程(代码→编译→链接→执行)。当以后正式用上各种自动化工具配置时,你知道它们为你做了什么。
如果你仍有意于使用 VS 而非 VS Code,可参阅另一文章
C语言/C++初学——Visual Studio环境的安装配置与使用1626 赞同 · 132 评论文章[图片上传失败...(image-47af67-1666761391796)]
正文分割线
安装 MinGW-w64 编译器套件
C/C++ 属于静态语言,编写它们的必备工具是一套编译器。
编译器不是呈给你一个界面让你写代码然后再让代码跑起来的那个东西。编写源代码的界面是本文后面要讲的文本编辑 (jí) 器;编译 (yì) 器只负责在这个界面背后,默默读取你写的代码,然后转换、生成一个程序文件 (该文件包含 CPU 能直接执行的机器指令,这才是能在电脑上跑起来的计算机程序;本文将“可执行文件”跟“程序”作同义词) 。
很多编程环境会配一个“运行”按钮,看起来能一键运行代码,其实质是帮你整合了调用编译器+执行程序的过程。初学者可能不太愿意拆解这背后的细节,但为了搭建任何类似本文所述的非集成式的编程环境,这个层面的认识都是必需的——编译、执行是两步走,只有前者是编译器的职责。
编译器本质上也是个软件,核心功能是读取代码和生成可执行文件,而这些功能不需要图形界面。所以编译器不是一个双击打开然后拿鼠标哐哐一顿点的东西,它只充当我们编程环境的一个“内核”。基于以上认识,再遇到错误时,请先区分开哪些是在漂亮的编程界面里栽的跟头,哪些是跟编译器交互时犯的错误,所谓冤有头债有主。
以上是 C/C++/Fortran 这类静态语言的共性。除此之外,作为高级程序语言,C/C++/Fortran 的另一基本特点是代码具有跨平台性,即在不同的硬件和操作系统平台上能保持基本一致的语言语法规则;但不同的硬件和操作系统底层可直接执行的指令显然各不相同,这就决定了我们需要不同的编译器。
本文提到的 MinGW-w64 是一个为 Windows 平台打造 C/C++/Fortran 等编译器的著名项目,不是唯一的选择但很有代表性,VS Code 官方文档也有推荐它。相关文件托管在 SourceForge 的网站上,官方下载地址为(如访问太慢可自寻其他渠道下载)
下载页面如下图,请按图示找到下载链接,
点击即可下载。具体的选择上,通常建议最新版本的 x86_64-win32-seh 版(x86_64 适用于 64 位系统,i686 适用于 32 位系统 (不推荐);win32 和 posix 代表线程模型,seh、sjlj、dwarf 代表不同的异常处理模式,不懂就随便选)。
Linux 和 Mac 通常可以利用命令行中的包管理器完成编译器的下载安装,可自行百度“Linux 安装 gcc”“Mac 安装 clang”,网络好的情况下装起来更方便。
下载下来是个 40MB+ 的压缩文件,后缀名为.7z
,可以使用开源的 7-Zip 压缩软件进行解压。
7-Zip 官方下载地址为 https://www.7-zip.org/download.html,精致小巧功能强大。
装好 7-Zip 后,在前面下载好的压缩包上右键,
选择“7-zip”→“提取到当前位置”,会解压出一个名为 mingw64 的文件夹,
请右键剪切到一个容易管理、路径中不包含任何中文和空格的位置,如果你没完全听懂这话是什么意思,建议选择 C 盘根目录,在空白处右键粘贴,操作完大概是下面这样子
点进去看一眼,里面就是 MingGW-w64 这套编译器的全部内容,你不应该改动这里的任何文件夹或文件。进行下一步前先查看一下图示的地址栏
你在之前可以把 mingw64 解压或移动到别的位置,但请务必确认这时的地址栏中显示的路径里不包含任何中文!一个中文字都不能有!否则请把 mingw64 文件夹挪到一个纯英文、最好连空格也没有、比较短的路径中。这件事非常重要!中文路径是各种找不到编译器或者调试报错的第一大敌ㄟ( ▔, ▔ )ㄏ。
继续打开上面的 bin 文件夹,里面是 MingGW-w64 直接面向用户提供的工具程序,其中就有 gcc、g++ 等编译器(其他还有汇编器、链接器、调试器和其他处理二进制文件的工具等,熟悉 GCC 的不会陌生)。
[图片上传失败...(image-cb9e67-1666761391796)]
本节开头提到过,编译器没有图形界面,不能通过双击直接打开。这类程序原则上应在所谓的命令行界面 (command line interface, CLI) 中由用户通过输入命令来调用,或者由其他应用程序在后台进行调用。
在Windows 10/11 系统上,按快捷键【Windows 徽标键】+【S】,搜索“cmd”或者“powershell”,即可打开系统的命令行界面。
命令行界面默认只能识别一些系统内置的命令,为了把上面的 gcc、g++ 等编译器加入到能被识别的命令中,需要把它们所在的目录(我这里即是 C:\mingw64\bin) 添加到一个名叫 PATH 的环境变量中。
再次打开搜索栏(快捷键【Win】+【S】),搜索“环境变量”,在弹出的两个匹配结果中,选择“编辑账户的环境变量”(强烈建议选择这个,防止你误改系统变量损害系统),
在弹出的“环境变量”对话框中,你可以看到上面是“用户变量”,下面是“系统变量”,并且都有一个 Path 变量。由于前面选择的只是编辑用户变量,所以下面的系统变量是灰显的不可编辑。双击上面的 Path,
在弹出的编辑界面中,双击下方的空白处,
此时下方将添加一条新的路径并进入编辑状态,在里面输入之前看到 gcc 等编译器时地址栏里的路径,类似下图所示
注意这里的地址绝对不能输错,哪怕错一个符号都将导致命令行界面找不到 gcc、g++ 等命令。为了确保正确性,可以先在文件管理器中找到 gcc 所在文件夹,按下图在地址栏中右键即可复制该路径,然后在这里粘贴即可。
或者使用替代方法:先在编辑界面点击空白处,确保已有的任何路径都未被选中,然后点击右侧“浏览…”,在浏览文件夹对话框中导航到装有 gcc 等编译器的 bin 文件夹,选中该文件夹后点击确定,
该路径将自动添加到编辑界面最后。无论使用哪种方法,确保路径输入正确,并且任何已有的变量内容未被错误修改后,
一路点击确定,完成环境变量 Path 的修改。如果不放心可以在确定后再重新打开看一眼确认修改成功。
为了验证编译器的安装和环境变量的添加是否正确,请再次启动 cmd(环境变量的修改不会在修改前打开的窗口中生效,请打开一个新的),输入命令
where gcc
并回车,如果结果类似下图这样,刚好把你之前添到环境变量 Path 里的那条路径输出出来,说明前面所有操作成功。
where 是一个系统内置命令,可以在环境变量 Path 里的所有路径中搜索指定的文件/命令,这里就拿它搜 gcc 了。
如果提示“用提供的模式无法找到文件”,请检查之前添加进 Path 的路径是否正确;如果出现多条路径,说明你以前还安装过别的 gcc,建议将其卸载。
除了利用 where 命令检查 gcc 安装的正确性,还可尝试直接使用 gcc。
单独输入gcc
,会报出一条错误,错误信息的意思是你使用姿势不对,但至少说明对 gcc 的调用成功了(而不是没找到 gcc)。输入gcc --version
,可以显示 gcc 的版本信息。
以上两条命令执行结果如下
如果在以上操作都成功后又挪动过 mingw64 文件夹的位置,请重新设置环境变量 Path。
安装 VS Code 文本编辑器
文本编辑器提供写代码的界面的辅助工具,它原则上不是必需品,也不为特定编程语言服务。只要是能编写纯文本文件的软件(最简如 Windows 自带的记事本),都可以编写任何语言的代码。但考虑到实际的编程体验,众多专用的编辑器被开发出来,以提供代码高亮(根据特定语言的语法给代码着色,便于阅读)、语法错误检查(在编译前提示错字漏字、不合语法的语句等错误)、断点调试、多文件多项目的管理等辅助功能。
本文使用的 VS Code 是文本编辑器中的优秀代表,官方主页为
VS Code 的全称是 Visual Studio Code,但它跟 Visual Studio (VS) 完全不是一个东西。都是微软家的产品,别搞错了。
根据你的系统下载适合的版本(本文以 Windows 为例),下载下来的安装包直接双击,一路下一步即可。安装完打开大概是这样的。
刚装好的界面语言是英文的,如果需要中文,按下图所示在扩展商店搜索“Chinese”,找到汉化插件,安装即可。
安装完先别急着重启,由于我们需要配置 C/C++ 环境,所以请再次搜索“C/C++”,安装这个插件。
安装或更新完插件后,务必关闭 VS Code 所有打开的窗口,重启 VS Code,以便使各种修改生效。
配置 C/C++ 的基本环境
请先完成前两节所有内容,重启过 VS Code 后再进行本节!
本节实际是 VS Code 针对 C/C++ 的具体使用姿势,并非只有唯一章法,但几个基本点有必要提及一下:
- 脑子里要有源代码文件这个概念。写程序不是说就在界面里写一堆代码然后就能跑了!代码都是先以文件的形式保存在文件管理器的某个盘 (C: D: E:等) 里,然后才有后续的操作;
- VS Code 是支持多语言的编辑器,并不只为 C/C++ 服务,所以还要确保把代码文件的后缀名 (扩展名) 写对,C 语言的后缀名是
.c
,C++ 的是.cpp
。这是 VS Code (或任何文本编辑器) 区分你代码类型的依据; - 前面安装的 "C/C++" 插件提供了对两门语言的支持。C 跟 C++ 是两门不同的语言,请向你的老师问清楚学的是哪一门。无论是在 .c 文件里敲 C++ 代码,还是在 .cpp 文件里敲 C 代码,都是绝大的祸害。
- 前面提到过处理 C/C++/Fortran 这类静态语言的两个基本步骤,一是从某个代码文件或某堆代码文件生成程序文件,这叫编译或生成,需要我们调用上面安装的 gcc 或 g++ 来完成这事;二是把刚刚生成的程序跑起来,这叫执行,需要你向系统发出执行这个程序的指示;
- 这两个基本步骤,跟之前试用 gcc 是否装好时一样,都是在命令行界面中进行,输入输出也是在这里面。VS Code 的优势之一,就是在自己内部集成了系统的命令行界面,名叫“终端”,从而不必再开新窗口。
请务必认真仔细阅读并充分理解以上几条内容,如果不解请留个心眼,以后遇到问题再回来看看。
进入正题,在 VS Code 中编写 C/C++ 程序,不建议直接新建个代码文件就开始写,请先选择菜单栏【文件】→【打开文件夹…】,来打开一个专门的文件夹(注意别点到下面的“打开工作区”了,工作区跟文件夹的用法有很大不同,本教程也不会涉及),
找到一个位置方便的文件夹,注意整条路径中不要包含任何中文
打开的文件夹所在的整条路经不要包含任何中文
打开的文件夹所在的整条路经不要包含任何中文
又是关于中文问题的三遍强调,小白踩坑的重灾区。保守估计过半的环境配置错误由此产生,请把这个要点牢牢刻在脑子里。
你的侧边栏会变成类似下面这样
第一次打开时右下角可能会弹窗提示自动下载"C/C++"插件的额外组件(3个),请务必确认它们下载安装成功。
“资源管理器”侧边栏由上至下分别是“打开的编辑器”“工作文件夹名”“大纲”,通过左侧的小三角>都可以展开或折叠。在这里能方便地进行新建、移动、复制、删除文件或文件夹等基本操作。
这样做的好处包括
- VS Code中打开的一个文件夹下可以包含你一个项目或一段时期内的各种文件,便于我们分门别类、有序地组织代码;
-
这个文件夹内可以保存独立的配置(位于自动创建的子目录
.vscode
下,能随工作文件夹一起移动),仅在这个文件夹内生效而不修改用户个人的全局配置,也不会与其他文件夹的配置相冲突。对于"C/C++"插件这是必需的; - VS Code的集成终端在打开的文件夹内自动以该文件夹为启动目录,这样在里面编译和执行程序时可以方便地使用相对路径。
所谓配置就是放在
.vscode
文件夹里的一堆.json文件,它们通常会被自动创建,保存了仅用于这个打开的文件夹的诸多配置,只要存在即可生效。换句话说,如果你创建了新的项目文件夹并想迁移旧有的配置,把整个.vscode
文件夹复制过去即可。而如果不小心把配置搞乱了,恢复初始状态最简单的方法就是删除整个.vscode
文件夹
路径是对计算机中文件和文件夹的指示,是编译和执行程序的必备基础知识,如有疑问请参阅以下扫盲贴,
基于Windows的 命令行 与 文件路径 扫盲96 赞同 · 12 评论文章
如今,"C/C++"插件已经更新到1.0.0版本,预定义的配置已经能够直接满足大部分工作所需。按快捷键【Ctrl】+【Shift】+【P】,打开命令面板,输入关键词"C/C++",在弹出的诸命令中选择编辑配置 (UI)或者Edit Configurations (UI),将弹出"C/C++"给我们的默认配置(JSON那个也能操作但难度较大,有兴趣的可自行研究)。
诸配置中最重要的是编译器路径和IntelliSense模式这两项,两者在右侧都有下拉三角。如果前面你正确配置了环境变量,路径的待选项中就会包含几个正确的编译器路径,编写C程序请选择gcc.exe,C++则选择g++.exe;模式选择gcc-x64。
配置完成后你可以看到一个
c_cpp_properties.json
文件被自动保存在了.vscode
子目录中,它只在你这个工作文件夹中生效。如果你使用一个新的工作文件夹,就重新配置一下或者把原来的.vscode
文件夹复制过来。
注意
.vscode
是你工作文件夹的子目录,下次打开这个项目时注意只开到上一级工作文件夹(比如我上面的myClang
,别开到.vscode
里面去了!
至此配置工作已基本完成,具体的用法示例见下。
编写"Hello World"程序
到工作文件夹中添加一个源代码文件,命名为hello.c(任意你喜欢的名字,但注意后缀名.c别忘了打上),
我这里的示例是C语言的,要使用C++的请注意后缀名为.cpp,并求教你的老师自行编写相应代码。
输完你的代码后,按快捷键【Ctrl】+【S】
保存、保存、保存!
你可以选择开启VS Code的自动保存功能,但手动保存习惯仍是最好的依靠。因为编译器需要从硬盘中读取你的代码文件,而未保存的代码在硬盘上是未更新的甚至压根不存在,将直接导致你实际编译的东西跟你写的东西压根不是一回事!这么多提醒你文件没保存的标记,没事瞄两眼。
第一次执行编译任务前,需要配置这个任务。选择菜单栏【终端】→【配置任务…】
在弹出的待选项中选择"C/C++: gcc.exe build active file"(如果是C++则应是"g++.exe build active file")
这时一个tasks.json
文件将被自动创建并保存在.vscode
中,并自动打开,其内容如下
在VS Code和"C/C++"插件都升级到最新版后,这个默认配置就已经相当完善,无需修改关闭即可。为了执行这个编译任务,先打开要编译的代码文件,然后选择菜单栏【终端】→【运行生成任务】(快捷键Ctrl+Shift+B)
在弹出的待选项中选择刚刚配置的任务名,
出现上图情景即代表编译成功!注意这个步骤仅仅是生成了目标程序,但还没有执行它。要执行这个程序把它跑起来,回到下面的终端,输入执行命令
这样就可以在终端中看到程序执行的效果了!
========下面到下个分割线前是本教程以前讲述的通过命令来编译代码的方式========
这种方式是全自由的,跟是否配置了生成任务没有关系。
保存后按快捷键【Ctrl】+【`】(主键盘区左上角Esc键下面那个)即可打开嵌入式终端(命令行环境),编译代码的命令为(如果是C++则将gcc替换为g++)
gcc˽-o˽目标程序路径˽源代码文件路径
我用符号˽
标记了空格,以防部分同学无视它们。“目标程序”即你要生成的程序文件,需要使用路径来指示,起名和加不加.exe都随意(因为它会自动加)。在我们这,由于已经在打开的文件夹里,可以使用相对路径,
gcc -o .\hello .\hello.c
回车,就能编译你刚刚的hello.c文件,如果成功,则在相同目录下生成一个hello.exe程序文件。执行程序的命令为
程序文件路径
是的形式上就是这样,只是路径可以是绝对或相对的,当然相对的一般更方便,这里要执行上面的程序就是
.\hello.exe
注意VS Code的默认终端实际上是PowerShell,需要使用.\
显式地指明它是当前目录下的可执行文件,如果省略它出于安全原因会拒绝你程序的执行。
========这套方式固然不甚方便,但这才是编译程序这件事最核心的姿势,上面生成任务的输出其实也展示了这点。无论VS Code和本教程如何更新,这套方案都会保留在这里,我的态度是:你可以不用,你可以不写,但你不能不会========
要是你的“Hello World”输出成功,恭喜你使用VS Code编写C的第一步已经成功。VS Code还包含许多其他有用功能,包括更人性化的断点调试、单步调试、变量监测等。作者另起一文详述了“调试”功能的配置和使用,具体可参见
VS Code之C/C++程序的调试(Debug)功能简介410 赞同 · 112 评论文章[图片上传失败...(image-a9026b-1666761391796)]
以及微软的官方文档
https://code.visualstudio.com/docs/cpp/cpp-debugcode.visualstudio.com/docs/cpp/cpp-debug
发布于 2019-08-07 19:24