diff --git a/README.md b/README.md index 5fe7c4ecd829210c2cd43370890c31ddf17201f6..e57f12282bfd620008562286f502f2a16811d3c5 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,16 @@ ## 项目介绍 -- [ ] Chrome_JavaScript - 学习笔记,小项目 -- [x] PlatfromIO_esp32 - 示波器,学会助手适配 -- [ ] Win11_vscode_c++ - windows11 系统 vscode 编译器 c/c++ 运行环境搭建 -- [ ] Small_boat_pid - 小船 pid 控制 +| Folder | Description | +| :--- | :--- | +| Chrome_JavaScript | 学习笔记,小项目 | +| PlatfromIO_esp32 | 示波器,学会助手适配 | +| Chrome_JavaScript | windows11 系统 vscode 编译器 c/c++ 运行环境搭建 | +| Small_boat_pid | 小船 pid 控制 | ### 如何使用,运行环境 - xxxxx -- x... -- readme.md ok +- x . . . +- Please read readmi.md \ No newline at end of file diff --git a/Win11_vscode_c++/.vscode/launch.json b/Win11_VScode_C++/Multi_file_structure/.vscode/launch.json similarity index 100% rename from Win11_vscode_c++/.vscode/launch.json rename to Win11_VScode_C++/Multi_file_structure/.vscode/launch.json diff --git a/Win11_vscode_c++/.vscode/settings.json b/Win11_VScode_C++/Multi_file_structure/.vscode/settings.json similarity index 100% rename from Win11_vscode_c++/.vscode/settings.json rename to Win11_VScode_C++/Multi_file_structure/.vscode/settings.json diff --git a/Win11_vscode_c++/.vscode/tasks.json b/Win11_VScode_C++/Multi_file_structure/.vscode/tasks.json similarity index 100% rename from Win11_vscode_c++/.vscode/tasks.json rename to Win11_VScode_C++/Multi_file_structure/.vscode/tasks.json diff --git a/Win11_vscode_c++/README.md b/Win11_VScode_C++/Multi_file_structure/README.md similarity index 100% rename from Win11_vscode_c++/README.md rename to Win11_VScode_C++/Multi_file_structure/README.md diff --git a/Win11_vscode_c++/test_one/app.exe b/Win11_VScode_C++/Multi_file_structure/test_one/app.exe similarity index 100% rename from Win11_vscode_c++/test_one/app.exe rename to Win11_VScode_C++/Multi_file_structure/test_one/app.exe diff --git a/Win11_vscode_c++/test_one/main.c b/Win11_VScode_C++/Multi_file_structure/test_one/main.c similarity index 100% rename from Win11_vscode_c++/test_one/main.c rename to Win11_VScode_C++/Multi_file_structure/test_one/main.c diff --git a/Win11_vscode_c++/test_one/max.c b/Win11_VScode_C++/Multi_file_structure/test_one/max.c similarity index 100% rename from Win11_vscode_c++/test_one/max.c rename to Win11_VScode_C++/Multi_file_structure/test_one/max.c diff --git a/Win11_vscode_c++/test_one/max.h b/Win11_VScode_C++/Multi_file_structure/test_one/max.h similarity index 100% rename from Win11_vscode_c++/test_one/max.h rename to Win11_VScode_C++/Multi_file_structure/test_one/max.h diff --git a/Win11_vscode_c++/test_two/Debug/app.exe b/Win11_VScode_C++/Multi_file_structure/test_two/Debug/app.exe similarity index 100% rename from Win11_vscode_c++/test_two/Debug/app.exe rename to Win11_VScode_C++/Multi_file_structure/test_two/Debug/app.exe diff --git a/Win11_vscode_c++/test_two/Header/add.c b/Win11_VScode_C++/Multi_file_structure/test_two/Header/add.c similarity index 100% rename from Win11_vscode_c++/test_two/Header/add.c rename to Win11_VScode_C++/Multi_file_structure/test_two/Header/add.c diff --git a/Win11_vscode_c++/test_two/Header/add.h b/Win11_VScode_C++/Multi_file_structure/test_two/Header/add.h similarity index 100% rename from Win11_vscode_c++/test_two/Header/add.h rename to Win11_VScode_C++/Multi_file_structure/test_two/Header/add.h diff --git a/Win11_vscode_c++/test_two/Source/main.c b/Win11_VScode_C++/Multi_file_structure/test_two/Source/main.c similarity index 100% rename from Win11_vscode_c++/test_two/Source/main.c rename to Win11_VScode_C++/Multi_file_structure/test_two/Source/main.c diff --git a/Win11_vscode_c++/test_zero/app.exe b/Win11_VScode_C++/Multi_file_structure/test_zero/app.exe similarity index 100% rename from Win11_vscode_c++/test_zero/app.exe rename to Win11_VScode_C++/Multi_file_structure/test_zero/app.exe diff --git a/Win11_vscode_c++/test_zero/main.c b/Win11_VScode_C++/Multi_file_structure/test_zero/main.c similarity index 100% rename from Win11_vscode_c++/test_zero/main.c rename to Win11_VScode_C++/Multi_file_structure/test_zero/main.c diff --git a/Win11_vscode_c++/test_zero/max.c b/Win11_VScode_C++/Multi_file_structure/test_zero/max.c similarity index 100% rename from Win11_vscode_c++/test_zero/max.c rename to Win11_VScode_C++/Multi_file_structure/test_zero/max.c diff --git a/Win11_vscode_c++/test_zero/max.h b/Win11_VScode_C++/Multi_file_structure/test_zero/max.h similarity index 100% rename from Win11_vscode_c++/test_zero/max.h rename to Win11_VScode_C++/Multi_file_structure/test_zero/max.h diff --git a/Win11_VScode_C++/Single_file_structure/.vscode/launch.json b/Win11_VScode_C++/Single_file_structure/.vscode/launch.json new file mode 100644 index 0000000000000000000000000000000000000000..7cb7af1957ca6b248f244614596247a78b9b9f62 --- /dev/null +++ b/Win11_VScode_C++/Single_file_structure/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) 启动", + "type": "cppdbg", + "request": "launch", + "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "miDebuggerPath": "C:\\driveDLL\\mingw64\\bin\\gdb.exe", + "setupCommands": [ + { + "description": "为 gdb 启用整齐打印", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "将反汇编风格设置为 Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/Win11_VScode_C++/Single_file_structure/.vscode/settings.json b/Win11_VScode_C++/Single_file_structure/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..5af06e3b8e94bb82e0e5520c45766f193b1f6e69 --- /dev/null +++ b/Win11_VScode_C++/Single_file_structure/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "add.h": "c" + } +} \ No newline at end of file diff --git a/Win11_VScode_C++/Single_file_structure/.vscode/tasks.json b/Win11_VScode_C++/Single_file_structure/.vscode/tasks.json new file mode 100644 index 0000000000000000000000000000000000000000..01a1b85649177e84e7c6b87161b3673107712ff3 --- /dev/null +++ b/Win11_VScode_C++/Single_file_structure/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc.exe 生成活动文件", + + // MinGW 的 gcc 编译器路径,.c 文件类型 + "command": "C:\\driveDLL\\mingw64\\bin\\gcc.exe", + // MinGW 的 g++ 编译器路径,.cpp 文件类型 + //"command": "C:\\driveDLL\\mingw64\\bin\\g++.exe", + + "args": [ + "-fdiagnostics-color=always", + + "-g", + // 添加工作区下 test_one 文件夹下所有 .c 源文件 + "${workspaceFolder}/test_one/*.c", + // 添加工作区下 test_one 文件夹下所有 .cpp 源文件 + // "${workspaceFolder}/test_one/*.cpp", + + "-I", + // 添加工作区下 test_one 文件夹下所以 .h 头文件 + "${workspaceFolder}/test_one", + + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "调试器生成的任务。" + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/Win11_VScode_C++/Single_file_structure/README.md b/Win11_VScode_C++/Single_file_structure/README.md new file mode 100644 index 0000000000000000000000000000000000000000..117aec3f04bff3549a05a04ae318712b1b014583 --- /dev/null +++ b/Win11_VScode_C++/Single_file_structure/README.md @@ -0,0 +1,398 @@ +# + +## 开始播放 + +大家好,我是UP主 klein !很多小伙伴在搭建VS Code的C/C++开发环境时遇到了问题。 +今天,我将手把手教你们如何一步步完成这个过程。废话不多说,让我们开始吧! + +### 步骤一:安装 MinGW + +- 下载并安装 MinGW 或 TDM-GCC。 +- 将 MinGW 的路径添加到系统的环境变量中,以便在命令行中直接调用这些工具。 + +### 步骤二:安装 VS Code + +- 从 VS Code 官网 下载并安装。 +- 打开 VS Code,你会看到一个简洁的界面。 + +### 步骤三:安装 C/C++ 插件 + +- 在 VS Code 中,点击左侧活动栏中的扩展图标(四个方块),然后搜索“C/C++”,找到由 Microsoft 提供的插件并安装。 + +### 步骤四:创建工作区 + +- 创建一个新的文件夹作为工作区,例如 test_c。 +- 在工作区文件夹中新建一个名为 main.c 的文件,并写入以下测试代码 + +### 步骤五:配置 `.vscode` 文件夹 + +- 在 VS Code 中打开 `main.c` 文件,然后点击菜单栏中的“运行 > 以非调试模式运行”或使用快捷键 `Ctrl + F5`。 +- 系统会弹出一个提示框让你选择配置,选择 `c/c++: gcc.exe 生成和调试活动文件...`。VS Code 会自动生成 `.vscode` 文件夹及其中的 `tasks.json` 和 `launch.json` 文件。 + +### 步骤六:编译和运行代码 + +- 点击“运行 C/C++ 文件”按钮(或使用快捷键 Ctrl + F5),VS Code 将根据 tasks.json 配置编译并运行代码,最终在终端中显示运行结果。 + +### 视频最后 + +如果你觉得这个教程对你有帮助,别忘了来个一键三连,支持一下 UP 主哦!不得不说,视频教程很值得一看,短时间内就能掌握使用 VS Code 搭建 C/C++ 开发环境的方法,非常实用。 + +--- + +## 黑箱 + +### 黑箱操作的困扰 + +虽然代码可以正常运行,但很多步骤像是“黑箱”操作,导致你无法完全理解整个编译和调试流程。这不仅可能使你的代码运行结果与预期不符,也让你难以个性化修改代码组织。 + +### 熟悉的问题,新的挑战 + +相信你对以下场景并不陌生: + +- **莫名其妙的报错**:昨天还能正常运行的程序,今天却突然报错了。 +- **重新配置无效**:新建一个工程后,按照往常的配置步骤进行,却依然出现各种问题。 +- **长时间未使用的项目**:几个月没动过的工程,今天打开运行,却发现各种报错,令人头疼。 + +### 小伙伴的疑问 + +到这里很多小伙伴活跃起来... + +- **小伙伴**:不就是 VS Code 搭建 C/C++ 开发环境嘛,我重新在电脑上跟着教程再走一遍问题不就解决了吗? + - **UP主**:确实,对于刚开始学习的小伙伴来说,重新配置是个不错的选择。不过,如果你写过毕设或者搞过毕业设计,三四个月写好的程序,重头来过真的挺煎熬的。 + +- **小伙伴**:我觉得这些报错信息太难懂了,每次都要在网上搜半天才能找到答案。 + - **UP主**:是啊,报错信息确实有点难懂。其实,关键是学会定位问题,知道问题出在哪一步,接下来问题就简单了 + +### 你以为你以为的就是你以为的吗? + +很多时候,我们觉得只要会用工具就行了,但在实际使用中会遇到不少盲区。比如: + +1. 以为工具很简单 + + - 实际情况:VS Code 和 C/C++ 插件不仅仅是代码编辑器和插件,还涉及到编译、调试等一系列复杂操作。理解这些工具的作用能让你在遇到问题时更有把握。 + +2. 以为配置一次就够了 + + - 实际情况:VS Code 的运行流程背后其实是多个工具协同工作的结果。理解这些流程能让你在遇到问题时更快地找到原因,而不是每次都从头再来。 + +## 让我们使用新的眼光理解这两个方面内容 + +搜索工具信息如下: + +### VS Code 编辑器作用 + +- 智能记事本:VS Code 是一个轻量级但功能强大的代码编辑器,它不仅能高亮代码、自动补全,还能通过插件扩展更多功能。 +- 插件服务:C/C++ 插件提供了自动补全代码、跳转到定义、语法检查和调试支持等功能,大大提升了编程效率。 + +### MinGW 编译器工具链 + +- 编译器(如 gcc 和 g++):把源代码编译成可执行文件。 +- 链接器:把多个文件组合成一个完整的程序。 +- 调试器(如 gdb):帮助你调试程序,找出潜在的问题。 + +### 工具的作用总结 + +- VS Code 和 C/C++ 插件:充当了一个智能记事本,提供辅助功能,但本身并不进行编译和调试工作。 +- MinGW 工具链:负责编译和调试工作,编译部分由 gcc 完成,调试部分由 gdb 完成。 + +> 小贴士:关键字 command 指定了编译器的完整路径,确保 VS Code 能够找到并调用正确的编译工具。如果你使用的是 C 语言代码,应该使用 gcc.exe;如果是 C++ 语言代码,应该使用 g++.exe。 + +--- + +### VS Code 的运行流程 + +#### 简单概括 + +1. **准备工作区文件夹和源文件(.c)测试代码** + - 创建一个名为 `test_c` 的文件夹作为工作区,并在其中创建 `main.c` 文件。 + +2. **在 VS Code 中打开 `main.c` 文件** + - 使用菜单栏中的“运行 > 非调试模式运行”或快捷键 `Ctrl + F5`。 + +3. **VS Code 调用 `.vscode/tasks.json` 文件,运行编译和运行任务** + - **首次运行时**,VS Code 会提示你选择构建和调试配置,选择 `c/c++: gcc.exe 生成和调试活动文件...`。 + - **自动生成配置文件**:VS Code 会在项目根目录下创建 `.vscode` 文件夹,并在其中生成 `tasks.json` 和 `launch.json` 文件。 + +4. **编译过程** + - 加载代码检查器,提供错误高亮和诊断输出信息。 + - 调用 MinGW 的 `gcc.exe` 编译器工具。 + - 加载头文件 `.h` 和源文件 `.c`。 + - 对多个文件进行编译,生成可执行文件 `main.exe`(名字可以修改)。 + - 加载并执行 `main.exe` 文件,输出结果到终端。 + +5. **VS Code 调用 `.vscode/launch.json` 文件,运行调试器任务** + - 调用 MinGW 的 `gdb.exe` 调试器工具。 + - 加载调试工具,执行 `main.c` 文件。 + - 提供断点设置、变量查看等调试功能。 + +#### 关键流程总结 + +- **VS Code 本身不具备编译和调试能力**,需要调用 `.vscode/tasks.json` 编译代码,调用 `.vscode/launch.json` 调试代码。 +- **编译代码部分**:`.vscode/tasks.json` 调用 MinGW 的 `gcc.exe` 编译工具实现。 +- **调试代码部分**:`.vscode/launch.json` 调用 MinGW 的 `gdb.exe` 调试工具实现。 + +> **小贴士**:关键字 `-g` 表示在这个符号后方添加源文件(.c 文件或 .cpp 文件)的路径;关键字 `-I` 表示在这个符号后方添加头文件(.h 文件)的路径。 + +--- + +## 错误处理 + +到这里相信很多小伙伴都在想:“你讲的都很好,但我的报错依然还在啊?”别急,我们先同步一下信息,然后一起来拿几个报错练练手。 + +在解决问题前先同步信息: + + 1. 工程目录结构(下方) + 2. tasks.json 文件内容 (最下方) + +### 工程目录结构 + +```cpp +e:\test_c\ + ├── .vscode\ + │ ├── tasks.json // 编译任务配置文件 + │ └── launch.json // 调试配置文件(可选) + └── test_one\ + ├── add.h // 头文件(可选) + ├── add.c // 源文件(可选) + └── main.c // 主程序源文件 +``` + + + +### 工程目录说明 + +```cpp +// 顶层 +test_c:工作区文件夹,包含整个项目的文件。 + +// 一级目录 +.vscode:工作区文件夹下的配置文件夹,用于存放编译和调试配置文件。 +test_one:工作区文件夹下的子文件夹,用于存放源代码文件。 + +// 二级目录 +tasks.json:编译任务配置文件。 +launch.json:调试配置文件(可选) + +add.h:位于 test_one 文件夹下的头文件。 +add.c:位于 test_one 文件夹下的源文件。 +main.c:位于 test_one 文件夹下的主程序源文件。 +``` + +### 常见的错误 + +> 弹窗: preLaunchTask"c/c++:gcc.exe 生成活动文件"已终止,退出代码为-1 +> 终端: ϵͳ�Ҳ���ָ����·���� (白色乱码) + +- **原因1**:可能是 MinGW 的 GCC 编译器路径配置错误。 +- **解决方法**:在 `tasks.json` 文件中找到关键字 `command`,修改为系统环境中 MinGW 的 GCC 编译器的路径。 + - 参考示例:如何获取 MinGW 的 gcc.exe 工具路径? + - 参考示例:tasks.json 文件 + +- **原因2**:系统环境变量未正确配置 MinGW 的路径。 +- **解决方法**:确保 MinGW 的路径已添加到系统的环境变量中。 + - 参考示例:如何获取 MinGW 的 gcc.exe 工具路径? + - 参考示例:如何判断 gcc.exe 工具可以工作? + +> 弹窗: preLaunchTask"c/c++:gcc.exe 生成活动文件"已终止,退出代码为-1 +> 终端: undefined reference to `WinMain' + +- **原因1**:工程中同时存在 `.c` 和 `.cpp` 文件类型,导致编译器混淆。 +- **解决方法**:确保使用统一的文件类型: + - 如果是 C 语言,使用 `gcc.exe` 编译 `.c` 文件。 + - 如果是 C++ 语言,使用 `g++.exe` 编译 `.cpp` 文件。 + +- **原因2**:可能是,源文件路径配置错误 +- **解决方法**: 在 tasks.json 文件中找到关键字 `args`,在 `-g` 后添加源文件路径。 + - 参考示例:tasks.json 文件 + +> 弹窗: 运行 preLaunchTask"c/c++:gcc.exe 生成活动文件"后存在错误 +> 终端: fatal error: add.h: No such file or directory (红色) + +- **原因**:头文件路径配置错误。 +- **解决方法**:在 `tasks.json` 文件中找到关键字 `args`,在 `-I` 后添加头文件路径。 + - 参考示例:工程目录结构路径 + - 参考示例:tasks.json 文件 + +> 弹窗: 运行 preLaunchTask"c/c++:gcc.exe 生成活动文件"后存在错误 +> 终端: error: returning 'void *' from a function with return type 'int' makes integer from pointer without a cast [-Wint-conversion] + +- **原因**:可能是 `C` 语言中使用了 `C++` 的关键字 `NULL`。 +- **解决方法**:根据终端提示修改代码,确保返回值类型匹配。 + - 参考示例:main.c 测试代码 + +> 弹窗: ♡⃝ ʜᴇʟʟᴏ📐 。◕‿◕。 +> 终端: 没有显示,哈哈 + +- **原因**:c/c++ 编程问题,学会查看终端出一些有用的错误信息 +- **解决方法**:我就不列举了,接下来是你的学习问题了,请向老师请教 + - 嘻嘻,我不是老师 (^_^) + - 这里报错问题主要给你作为参考,不可能百分百出现一模一样的情况 + - 》》》 小伙伴 > 总监 + - 》》》 UP主 > 新员工 + - 总监:说了多少次了,特别是这个 logo ,我说要“五彩斑斓”的黑色!你就这 ... ,重做 + - 新员工:啥?我混了这么久都没有听过这种颜色?难道 ... + - 参考示例:??? + +### 顺利情况下,在终端中输出信息如下 + +```powershell +PS E:\code\test_c> & 'c:\Users\Sword\.vscode\extensions\ms-vscode.cpptools-1.22.11-win32-x64\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-cixasrye.ovd' '--stdout=Microsoft-MIEngine-Out-5v1bla0c.oxx' '--stderr=Microsoft-MIEngine-Error-j12yikuv.wqp' '--pid=Microsoft-MIEngine-Pid-034ysmg1.i5b' '--dbgExe=C:\driveDLL\mingw64\bin\gdb.exe' '--interpreter=mi' +add(3,2) = 5 +welcome to c/c++ World! +PS E:\code\test_c> +``` + +> 欢迎回到 `c/c++` 世界 + +### 如何获取 MinGW 的 gcc.exe 工具路径? + +- 按 `Win + R` 打开运行窗口,输入 `cmd` 并回车,打开命令提示符。 +- 输入 `where gcc` 回车,查看返回的路径信息 +- 如果没有显示路径信息,重新安装 MinGW 后,再添加到系统环境变量中 +- 我的电脑安装(或下载)配置 MinGw and TDM-GCC 两个工具链 + +- 正确反馈信息 + +```powershell +Microsoft Windows [版本 10.0.22631.4602] +(c) Microsoft Corporation。保留所有权利。 + +C:\Users\Sword>where gcc +C:\driveDLL\mingw64\bin\gcc.exe +C:\TDM-GCC-64\bin\gcc.exe + +C:\Users\Sword> +``` + +- 错误反馈信息 + +```powershell +C:\Users\Sword>where apple +信息: 用提供的模式无法找到文件。 + +C:\Users\Sword> +``` + +### 如何判断 gcc.exe 工具可以工作? + +- 输入 `gcc --version` 回车,查看返回的版本信息。 +- 输出版本信息如下:显示 gcc 路径相关信息 +- 报错或者警告,重新安装 MinGW,再添加到系统环境变量中 + +- 正确反馈信息 + +```powershell +C:\Users\Sword>gcc version +C:/driveDLL/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find version: No such file or directory +collect2.exe: error: ld returned 1 exit status + +C:\Users\Sword> +``` + +- 错误反馈信息 + +```powershell +C:\Users\Sword>apple version +'apple' 不是内部或外部命令,也不是可运行的程序 +或批处理文件。 + +C:\Users\Sword> +``` + +### 参考示例 + +#### main.c 测试代码 + +```cpp +#include + +int main() +{ + printf("welcome to c/c++ World!\n"); + // return NULL; + return 0; +} +``` + +#### tasks.json 文件 + +```json +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc.exe 生成活动文件", + // MinGW 的 GCC 编译器路径,.c 文件类型 + "command": "C:\\driveDLL\\mingw64\\bin\\gcc.exe", + // MinGW 的 GCC 编译器路径,.cpp 文件类型 + //"command": "C:\\driveDLL\\mingw64\\bin\\g++.exe", + "args": [ + "-fdiagnostics-color=always", + "-g", + // 添加工作区下 test_one 文件夹下所有 .c 源文件 + "${workspaceFolder}/test_one/*.c", + // 添加工作区下 test_one 文件夹下所有 .cpp 源文件 + // "${workspaceFolder}/test_one/*.cpp", + "-I", + // 添加工作区下 test_one 文件夹下所以 .h 头文件 + "${workspaceFolder}/test_one", + + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "调试器生成的任务。" + } + ], + "version": "2.0.0" +} +``` + +#### 工程目录结构路径 + +```cpp +e:\test_c\ // "${workspaceFolder}", + ├── .vscode\ // "${workspaceFolder}/.vscode" + │ ├── tasks.json // "${workspaceFolder}/.vscode/tasks.json" + │ └── launch.json // "${workspaceFolder}/.vscode/launch.json" + └── test_one\ // "${workspaceFolder}/test_one" + ├── add.h // "${workspaceFolder}/test_one" + ├── add.c // "${workspaceFolder}/test_one/add.c", + └── main.c // "${workspaceFolder}/test_one/main.c", +``` + +tip: `*.c` 两部分组成:`*` 表示所有,`.c` 表示指定什么结尾的文件 + +--- + +## 补充说明 + +1. **`launch.json` 文件的调试部分**: + - `launch.json` 文件用于配置调试器,确保你可以逐步调试代码。建议小伙伴们参考官方文档 + +2. **高级配置**: + - 想不想把 Visual Studio Code 配置得像 Microsoft Visual Studio 一样强大?高级配置技巧你不期待! + +3. **完整代码和资源**: + - 完整代码放在 Gitee 上,git clone 下来即可: + - Gitee 项目地址: [https://gitee.com/klein1412/esp32_oscilloscope](https://gitee.com/klein1412/esp32_oscilloscope) + +4. **学习资源**: + - 有“能力”的小伙伴可以直接阅读原文中 C++ 主题相关内容,解决大部分疑惑。 + - Visual Studio Code 官方文档也有相关主题介绍,可以参考: + - [Visual Studio Code document](https://code.visualstudio.com/docs) + +--- + +### 欢迎回到 `c/c++` 世界 + +怎么样?看完这些内容后,你的问题解决了吗?希望这篇笔记能帮助你更好地理解 VS Code 的基础操作和运行流程。对我来说,这也是一个知识记忆的备份。每次写专栏时,修改好几次,确保每个步骤都清晰易懂。这次因为使用 VS Code 配置 C/C++ 和 EasyX 开发环境后,发现效果很不错,之前用 Visual Studio 占用了不少存储空间,所以想着改用轻量级的 VS Code 来代替。于是就有了这篇专栏,写了又删,删了又写,确实有点纠结 😅。 diff --git a/Win11_VScode_C++/Single_file_structure/temporary.md b/Win11_VScode_C++/Single_file_structure/temporary.md new file mode 100644 index 0000000000000000000000000000000000000000..c374e7503b359296e6eec68959aa12c5681fad9d --- /dev/null +++ b/Win11_VScode_C++/Single_file_structure/temporary.md @@ -0,0 +1,168 @@ +# 临时文件 + +关键字: command ,指定要执行的命令,通常是编译器路径(如 gcc 或 g++)。 + +1.开发环境配置错误 + 1.退出当前工程,在外面新建一个 my_test 文件夹作为工作区,里面新建一个 main.c 文件 + 示例代码: + ```cpp + #include + int main() + { + printf("welcome c/c++ World!\n"); + return 0; + } + ``` + 2.保存刚刚编码的代码后,点击 > 运行 c/c++ 文件(按钮),或者菜单栏中的:运行 > 以非调试模式运行 + 3.弹出提示框选择配置:选项 > + c 语言选择 > c/c++: gcc.exe 生成和调试活动文件... + c++ 语言选择 > c/c++: g++.exe 生成和调试活动文件... + + 4.如果有选项,点击后自动生成 .vscode 文件夹里面有一个 tasks.json 配置文件 + 在 tasks.json 文件夹中,添加如下代码: + 示例:"command": "C:\\driveDLL\\mingw64\\bin\\gcc.exe", + 5.此时 mian.c 通过的编译输出结果在控制台上,检查输出是否一致 + + 6.如果没有选项相同的、出现其它选项,可能是误删了 MinGW 编译工具,或者对文件夹、文件的的移动, + 导致之前 MinGW 配置 window 系统环境变量路径不对,vs code 找不到出现报错情况 + +/* + +## 可能的错误原因及解决方法 + +### 1. 开发环境配置错误 + +如果你现在遇到问题,可能是以下几个原因导致的: + +1. **重新创建一个干净的工作区**: + +- 退出当前工程,在外面新建一个 `my_test` 文件夹作为新的工作区。 +- 在这个文件夹里新建一个 `main.c` 文件,写入简单的示例代码: + +```cpp +#include + +int main() +{ + printf("Welcome to C/C++ World!\n"); + return 0; +} +``` + +1. **保存代码并尝试运行**: + - 保存刚刚编码的代码后,点击 VS Code 中的“运行 C/C++ 文件”按钮,或者选择菜单栏中的“运行 > 以非调试模式运行”。 + - 如果弹出提示框让你选择配置,选择: + - 对于 C 语言:`c/c++: gcc.exe 生成和调试活动文件...` + - 对于 C++ 语言:`c/c++: g++.exe 生成和调试活动文件...` + +2. **检查自动生成的配置文件**: + - 如果选择了正确的选项,VS Code 会自动生成 `.vscode` 文件夹,并包含 `tasks.json` 配置文件。 + - 确保 `tasks.json` 文件中的编译器路径正确,例如: + +Questions:小伙伴提问 +answer:我回答 + +到这里很多小伙伴坐不住了 。。。 + Questions:你说对使用工具重新理解,难道 UP主 是菜鸟不成需要理解吗? + Answer: 出问题了,不知道是哪个部分,对工具不过了解 + + Questions:c/c++ 插件作用?难道需要理解吗? + Answer: 很有必要,这是我们的学习目标,希望学完之后,能够自己搭建一个 c/c++ 开发环境 + +## 发现现有信息不够,调用"AI助手"补充工具的信息 + +## VS Code:这是一个轻量级但功能强大的代码编辑器 + + 1. 你可以把它想象成一个智能记事本,但它可以做更多事情,比如代码高亮、自动补全等。 + 2. 提供插件服务 + +## C/C++ 插件:这是给 VS Code 安装的一个扩展,专门用来支持 C/C++ 语言。它提供了很多有用的功能,比如 + + 1. 自动补全代码 + 2. 跳转到定义 + 3. 语法检查 + 4. 调试支持 + +## MinGW:这是一个编译器工具链,它能帮你把 C/C++ 代码变成能在电脑上运行的程序。它包括 + + 1. 编译器(如 gcc 和 g++),用来把源代码编译成可执行文件。 + 2. 链接器,用来把多个文件组合成一个完整的程序。 + 3. 调试器(如 gdb),用来帮助你调试程序。 + +你回头看一遍,是否对自己现有的工具作用,有新变化呢? +从现有信息可以了解到, + 1. vs code 编辑器和 c/c++ 插件组合,充当一个智能记事本, 不具体对代码进行编译和调试功能 + 2. vs code 需要依赖 MinGW 工具链来完成编译和调试工作 + 3. MinGW 工具链的编译部分由 gcc 完成,调试部分由 gdb 完成 + +先处理 vs code 配置部分: + +vs code 编译和运行代码流程大致分为: + 1.准备好工作区文件夹和源文件(.c)测试代码 + 2.在 VS code 中打开 main.c 文件,在菜单 > 运行 > 非调试模式运行 (ctrl + F5) > 点击 + 3.vs code 调用 .vscode/tasks.json 文件,运行编译和运行任务 + - 加载代码检查器,错误高亮诊断输出信息 + - 加载 MinGW 的 gcc.exe 编译器工具 + - 加载头文件 .h 文件和源文件 .c 文件(前提编写代码文件) + - 对加载多个文件进行编译,生产执行文件 main.exe (名字可以修改) + - 加载并执行 main.exe 文件输出打印信息在终端 + 5.vs code 调用 .vscode/launch.json 文件,运行调试器任务 + - 加载执行文件 main.exe + - 加载 MinGW 的 gdb.exe 调试器工具 + - 加载调试工具,执行 main.c 文件 + +证明我理解配置流程,找到文档的这段描述:确定我的流程大致没有错误 + +Understanding tasks.json +The first time you run your program, the C++ extension creates a tasks.json file, +which you'll find in your project's .vscode folder. tasks.json stores your build configurations. + +了解 tasks.json +首次运行你的代码后,vs code 会创建一个 tasks.json 文件,该文件位于项目的 .vscode 文件夹中。 + +对 vs code 运行的整个流程 + 1. vs code 对代码编译和调试能力,靠调用 .vscode/tasks.json 编译代码,调用 .vscode/launch.json 调试代码 + 2. .vscode/tasks.json 调用 MinGW 的 gcc.exe 编译工具实现 + 3. .vscode/launch.json 调用 MinGW 的 gdb.exe 调试工具实现 + +重新整理两部分后,对现有工具作用有了更清晰的认识,关键流程是: + + - run > .vscode/tasks.json > MinGW/gcc.exe > load(.c | .h) > create (.exe) > output(test result) + + - 启动时,调用 tasks.json 任务,调用 gcc.exe 编译工具,加载指定头文件和源文件,生成可执行文件,输出测试结果 + +第二步,下方面二选一 + +1.依赖 vs code 编译器生成工作区的工程目录结构 + + 1.建立一个名称为 "test_box" 文件夹作为工作区, + 2.在里面建立一个文件:main.c + - 代码示例在下面继续阅读: + + 1. 在打开 main.c 文件的情况下,在菜单栏找到,下方面二选一 + 1. 运行 > 以非调试模式运行 > 点击 + 2. 在运行和调试图标栏中点击 > 运行 c/c++ 文件 + + 2. 弹出提示框选择配置:选项二选一 + 1. c 语言选择 > c/c++: gcc.exe 生成和调试活动文件... + 2. c++ 语言选择 > c/c++: g++.exe 生成和调试活动文件... + + 3. 自动在 "test_box" 文件夹下生成一个 ".vscode " 文件夹和 "tasks.json" 文件 + + 4. 找到 “终端” 查看是否有输出 + + 5. 没有运行和输出,下方面二选一 + 1. 运行 > 以非调试模式运行 > 点击 + 2. 在运行和调试图标栏中点击 > 运行 c/c++ 文件 + + 6. 找到 “终端” 查看是否有输出 + +好的,高手都离开了,接下来菜鸟互啄时间,经过对官网文档阅读后,太吃力,突然困了💤 + +在 vs code 配置 esayX 图像库时查找资料发现,vs code 官方文档有相关主题介绍,可以参考: + 1. Visual Studio Code document address: + 2. Overview: + - C++ + - USER GUIDE + +有“能力”的小伙伴可以直接阅读原文中 c++ 主题相关内容,解决大部分疑惑。 diff --git a/Win11_VScode_C++/Single_file_structure/test_one/add.c b/Win11_VScode_C++/Single_file_structure/test_one/add.c new file mode 100644 index 0000000000000000000000000000000000000000..c45f4a0c3be24a764ed165740c00eabfc01dde94 --- /dev/null +++ b/Win11_VScode_C++/Single_file_structure/test_one/add.c @@ -0,0 +1,6 @@ +#include "add.h" + +int add(int a, int b) +{ + return a + b; +} \ No newline at end of file diff --git a/Win11_VScode_C++/Single_file_structure/test_one/add.h b/Win11_VScode_C++/Single_file_structure/test_one/add.h new file mode 100644 index 0000000000000000000000000000000000000000..bf5a724be8bbaa3ec3bbc93ea4af64d1df7b3a1e --- /dev/null +++ b/Win11_VScode_C++/Single_file_structure/test_one/add.h @@ -0,0 +1,8 @@ +#ifndef ADD_H +#define ADD_H + +#include + +int add(int a, int b); + +#endif diff --git a/Win11_VScode_C++/Single_file_structure/test_one/main.c b/Win11_VScode_C++/Single_file_structure/test_one/main.c new file mode 100644 index 0000000000000000000000000000000000000000..cb8bb271f757640fd494a9504d3ed11462b44c79 --- /dev/null +++ b/Win11_VScode_C++/Single_file_structure/test_one/main.c @@ -0,0 +1,17 @@ +#if 1 +#include +#include "add.h" + +int main() +{ + int a = 3; + int b = 2; + int c = add(a, b); + + printf("add(%d,%d) = %d\n", a, b, c); + + printf("welcome to c/c++ World!\n"); + + return 0; +} +#endif diff --git a/Win11_VScode_C++/Single_file_structure/test_one/main.exe b/Win11_VScode_C++/Single_file_structure/test_one/main.exe new file mode 100644 index 0000000000000000000000000000000000000000..d642b6321e1a114f498f32d743bc6dcdec907245 Binary files /dev/null and b/Win11_VScode_C++/Single_file_structure/test_one/main.exe differ