参考文章:
在今年的秋招中,因为受之前米家游戏的影响,因此想去猛盒游这边投投简历试试水 —— 当然投的是前端开发的岗位。不出意外的,简历初筛过了,拿到了海笔的资格。
但当我打开试卷时,我傻眼了 —— 2025 秋招 - 程序通卷。这也就意味着,所有开发岗都做的是同一套卷子。
果不其然,打开后的第一道题目便是:
class ResourceManager { private: int* data; public: ResourceManager() { data = new int[10]; std::cout << "Resource allocated\n";}
~ResourceManager() { delete[] data; std::cout << "Resource deallocated\n";}
}; int main() {ResourceManager rm;
return 0;}
- 运行结果是什么?
- 如果在构造函数中发生异常,会有什么问题?如何改进代码以避免资源泄漏?
哦,真就默认所有写代码的全都会 C++ 了是吧?
基本上只对 JS/TS 熟悉的我,自然基本上交了白卷,更不用说后面那一堆难的变态的算法题了。该说海笔不愧是海笔,我估计基本上就没有太想招人的意思,发了发试卷给我们做做而已。
不过,我也开始思考:C 是大一刚进来就学的东西,现在写算法题又基本上都用 C++,而且作为一门历史悠久的语言,它的手动内存管理以及更接近硬件本质的语法和编译,作为一名技术人应该都要好好学习一下并掌握。
而且随着 wbsm
技术的流行,一堆的前端库都用 Rust
进行编写, V8
引擎本身也是用 C++ 来编写的。技多不压身,多学一点、多了解一点总没坏处。
呃,所以我开始学 C++ 了。
好,接下来进入正题。作为一个写前端的,vscode 绝对是最常用的编辑器,自然写 C++ 也会想保留自己的使用习惯。那么怎么在 vscode 里面配置 C/C++ 调试环境呢?
# 安装 MinGW-w64
MinGW-w64 是 Minimalist GNU for Windows 的一个扩展版,是一个开源的 Windows 平台的开发工具集,主要用于在 Windows 上构建和运行基于 GNU 工具链(如 GCC)的应用程序。相比原始的 MinGW 项目,MinGW-w64 增强了对 64 位 Windows 的支持,并提供了更多的功能和改进。换句话说,你想要在 Windows 上面编译 C/C++,必须得安装这个工具集。所以安装它是必要的一个步骤,如果安装过了可以跳过!
# 安装并解压最新版本
前往 https://github.com/niXman/mingw-builds-binaries,找到 Releases。这里包含了所有最新版本的构建好的 MingGW-w64 二进制文件,选择你需要的版本下载即可。
对于这些特定的后缀名称代表了各个不同的版本。我们如果是在一般的 win11 机器上面安装的话,一般下载 posix-seh-ucrt
就可以了,如果有其他的需求可以自己搜索。
下载之后是一个压缩包,解压到你认为合适的位置。比如我自己是解压到 D:\MinGW\mingw64
这个目录下面。
# 添加环境变量
win+R
输入 sysdm.cpl
打开系统属性,选中 “高级” 再打开 “环境变量”,找到 “系统变量” 的 Path 变量,点击编辑之后新建 D:\MinGW\mingw64\bin
并确定。 \bin
目录里面包含了很多 C++ 的编译器。
添加完成后,打开 powershell,输入 gcc --version
来看看是否有输出版本相关信息。
如果有输出,那么就说明 MinGW 已经安装成功了,可以进行 vscode 的环境配置了!
# vscode 配置
# C/C++ 插件
创建一个你想使用 C++ 开发的空目录,用 vscode 打开,前往插件商店里面搜索并安装 C/C++
插件。
然后 Ctrl + Shift + P
打开快捷指令,向其中输入 C/C++ Edit Configurations
并选择第一个选项进入插件设置界面。以下是需要用户自己设置的一些配置选项:
-
配置名称:
如果你是 Win11,设置为 Win32 即可,如果是其他的系统就根据自己的实际情况设置。
-
编译器路径:
就是我们上面讲的 MinGW 安装路径,
\bin
目录下面有非常多的编译器供选择。如果是编译 C/C++ 代码,我们会使用gcc
/g++
。如果你是纯 C++ 项目,推荐选择
g++
编译器;如果是 C/C++ 混合项目或者是纯 C 项目,推荐选择gcc
编译器。如果纯 C++ 项目仍然想要使用
gcc
进行编译,需要手动为编译行为添加连接 C++ 标准库的参数。 比如你有一段要编译的 C++ 代码main.cpp
,使用g++
编译的命令可能为:g++ -fdiagnostics-color=always -g main.cpp -o main.exe
使用
gcc
编译的命令就需要为:gcc -fdiagnostics-color=always -g main.cpp -o main.exe -lstdc++
-
编译器参数:
正如上面所说的,如果你对你的编译命令有特殊的参数要求,可以在这里添加。每行输入一个参数。
-
IntelliSense 模式
编写 C/C++ 的时候的智能感知模式。我们一般选择
windows-gcc-x64
即可。 -
C/C++ 标准
C 标准一般选择 C17,比较稳定而且新。看你个人选择。
C++ 标准一般配合 C 标准选择
gnu++ 17
版本。
配置完成之后,会在你打开的这个目录下面自动创建一个 .vscode
的目录,里面有个 c_cpp_properties.json
文件,保存了你刚刚配置的信息。基本上你每次创建一个新 C++ 项目都得重新打开一遍插件的设置界面,即使你什么都不做它也会自动帮你创建好这个文件。
# 创建编译任务
在你的这个目录下面新建一个 main.cpp
的文件,往里面输入一段初学者的代码:
#include <iostream> | |
#ifdef _WIN32 | |
#include <windows.h> | |
#endif | |
using namespace std; | |
int main() | |
{ | |
#ifdef _WIN32 | |
SetConsoleOutputCP(CP_UTF8); | |
#endif | |
cout << "Hello, World!" << endl; | |
return 0; | |
} |
然后你会发现右上角的运行按钮会多了个 debug 的标识。我们点击下拉按钮,选择 “运行 C/C++ 文件”。
我们选择第一个,就是刚刚通过配置插件配好的任务:
稍微等一下之后,不出意外的话就会在你的控制台上面成功打印 “Hello World!” 字符串,说明你的配置是没问题的。
与此同时,会在你的 .vscode
目录下面生成一个 task.json
的文件,里面就是具体的任务配置信息。在接下来的调试配置中,我们就要使用这个任务配置的信息。
到此为止,在 vscode 里面运行 C/C++ 的环境基本上 OK 了,接下来是调试配置。
# 创建调试配置
我们打开 vscode 左侧边栏的 “运行与调试” 按钮,点击 “创建 launch.json 文件” 按钮。
选择下拉框的第一个建议选项。
然后就会自动为你创建一个 launch.json
文件,不过里面是空的。
接下来,在 “configurations” 数组里面键入 “C”,会弹出一堆的预置配置项,我们选择 C/C++:(gdb)启动
我们要把里面的 program
和 miDebuggerPath
这两个配置项给改了。
program
: 运行程序的完整路径。一般设置为:${fileDirname}\\${fileBasenameNoExtension}.exe
。miDebuggerPath
: MI 调试程序 (如 gdb) 的路径。一般设置为你安装 MinGW 目录/bin/gdb.exe
。对照我的:D:\\MinGW\\mingw64\\bin\\gdb.exe
。
设置完成之后,我们可以试着编写复杂点的程序来测试断点调试。我给出一个经典的二分查找的代码用于测试:
#include <iostream> | |
#ifdef _WIN32 | |
#include <windows.h> | |
#endif | |
using namespace std; | |
class Solution | |
{ | |
public: | |
int binary_search(int arr[], int n, int target) | |
{ | |
int left = 0, right = n - 1; | |
while (left <= right) | |
{ | |
int mid = left + (right - left) / 2; | |
if (arr[mid] == target) | |
return mid; | |
else if (arr[mid] < target) | |
left = mid + 1; | |
else | |
right = mid - 1; | |
} | |
return -1; | |
} | |
}; | |
void test() | |
{ | |
Solution solution; | |
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; | |
int n = sizeof(arr) / sizeof(arr[0]); | |
int target = 5; | |
int result = solution.binary_search(arr, n, target); | |
if (result != -1) | |
cout << "Element found at index " << result << endl; | |
else | |
cout << "Element not found in the array" << endl; | |
} | |
int main() | |
{ | |
#ifdef _WIN32 | |
SetConsoleOutputCP(CP_UTF8); | |
#endif | |
cout << "Hello, World!" << endl; | |
test(); | |
return 0; | |
} |
我们在 int mid = left + (right - left) / 2;
的地方打断点,之后启动调试:
可以看到,能够准确的在断点位置停住并显示堆栈相关的内容。
至此,基本上开发前的准备工作都完成了,可以愉快的开始使用 vscode 编写 C/C++ 代码了!!
不过唯一有点不足的点就是,每次创建新项目都得重复一遍这样的操作有点繁琐。可以将常用的这几个文件都装到一个目录里面,新建项目的时候都复制一份就可以了!
希望这篇文章对你有所帮助~