文章目录
下载 Visual Studio Code (vscode)
- 下载链接:https://code.visualstudio.com/Download
- 安装路径自定义
安装cpptools
下载MinGW 和 node.js ,并配置环境变量
-
MinGW下载地址:https://sourceforge.net/projects/mingw-w64/files/
进入网站后向下滑,找到最新版本,我选择的如下图
下载解压后安装到指定路径,我安装的路径是 E:\vs\MinGW
-
在下载MinGW前可能需要下载node.js ,可去其官网下载 https://nodejs.org/zh-cn/
-
安装完成后配置环境变量,根据自己的安装路径如下配置:
-
完成以上步骤后,验证环境变量是否配置成功:
按键 win + R 输入“ cmd ” 打开命令行工具,然后在命令行中输入 g++ -v ,如果出现以下情况则说明配置成功
使用单个.cpp文件配置C++文件
-
首先,我在桌面上创建文件夹 “ new_project ”。
-
打开 new project ,新建“ test.c ”文件,输入以下代码。
#include <stdio.h> int main(void) { printf("Hello world!"); return 0 ; }
-
进入调试界面添加配置环境,选择 C++(GDB/LLDB),再选择 g++.exe,之后会自动生成 launch.json 配置文件。
-
接下来编辑 launch.json 文件如下:
{ "version": "0.2.0", "configurations": [ { "name": "task g++", //修改此项 "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, //编辑此项,弹出终端 "MIMode": "gdb", "miDebuggerPath": "E:\\vs\\MinGW\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "task g++" //修改此项名称 } ] }
-
接着编辑 task.json 如下:
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "task g++", //修改此项与launch.json中的preLaunchTask中一致 "command": "E:\\vs\\MinGW\\mingw64\\bin\\gcc.exe", "args": [ "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${workspaceFolder}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务。" }, ], }
-
保存后回到test.c文件按F5编译链接运行成功,(name、preLaunchTask和 label可修改也可以保持默认,但是三者必须保持一致)
编写C++程序添加并应用自定义头文件
-
但是我们完成项目过程中为了代码的可移植性和可读性,往往需要自定义头文件。
-
本项目完成以下功能:
- 首先读取一串列标号。这些标号成对出现,表示输入行的列范围。这串列标号以一个负值结尾,作为结束标志。
- 剩余的输入行被程序读入并打印,然后输入行中被选中范围的字符串被提取出来并打印。
- 每行第一列的列标号为零。
-
文件结构如下:
C:\Users\15476\Desktop\new_project
C:\Users\15476\Desktop\new_project\include
-
代码如下:
test.c
#include<stdio.h> #include<stdlib.h> #include<string.h> #include"rearrange.h" #include"read_column_numbers.h" #define MAX_COLS 20 /*所能处理的最大列号*/ int main(void) { int n_columns; /*进行处理的列标号*/ int columns[MAX_COLS]; /*需要处理的列数*/ char input[MAX_INPUT]; /*容纳输入行的数组*/ char output[MAX_INPUT]; /*容纳输出行的数组*/ /* **读取该串列标号 */ n_columns = read_column_numbers(columns, MAX_COLS); /* **读取、处理和打印剩余的输入行 */ while (gets(input) != NULL) { printf("Original input : %s\n", input); rearrange(output, input, n_columns, columns); printf("Rearranged line: %s\n", output); } return EXIT_SUCCESS;
read_column_numbers.c
#include<stdio.h> #include<stdlib.h> #include<string.h> #include"read_column_numbers.h" /* **读取列标号,如果超出规定范围则不予理会 */ int read_column_numbers(int columns[], int max) { int num = 0; int ch; /* **取得列标号,如果所读取的数小雨0则停止 */ while (num < max && scanf("%d", &columns[num]) == 1 && columns[num] >= 0) { num += 1; } /* **确认已经读取的标号为偶数个 */ if (num % 2 != 0) { puts("Last column number is not paired."); exit(EXIT_FAILURE); } /* **丢弃该行中包含最后一个数字的那部分内容 */ while ((ch = getchar()) != EOF && ch != '\n'); return num; }
read_column_numbers.h
#ifndef READ_COLUMN_NUMBERS_H #define READ_COLUMN_NUMBERS_H int read_column_numbers(int columns[], int max); #endif
rearrange.c
#include<stdio.h> #include<stdlib.h> #include<string.h> #include"rearrange.h" /* **处理输入行,将指定列的字符连接在一起,输出行以NUL结尾 */ void rearrange(char* output, char const* input, int n_columns, int const columns[]) { int col; /*columns数组的下标*/ int output_col; /*输出列计数器*/ int len; /*输出行的长度*/ len = strlen(input); output_col = 0; /* **处理每对列标号 */ for (col = 0; col < n_columns; col += 2) { int nchars = columns[col + 1] - columns[col] + 1; /* **如果输出行结束或输出行数组已满,就结束任务 */ if (columns[col] >= len || output_col == MAX_INPUT - 1) break; /* **如果输出行数据空间不够,只复制可以容纳的数据 */ if (output_col + nchars > MAX_INPUT - 1) nchars = MAX_INPUT - output_col - 1; /* **复制相关数据 */ strncpy(output + output_col, input + columns[col], nchars); output_col += nchars; } output[output_col] = '\0'; }
rearrange.h
#ifndef REARRANGE_H #define REARRANGE_H #define MAX_INPUT 1000 /*每个输入行的最大长度*/ void rearrange(char* output, char const* input, int n_columns, int const columns[]); #endif
-
想要在vscode中用自定义头文件,可按如下步骤进行(就以以上项目为实例)<首先已经完成单个cpp文件配置C/C++>
-
在vscode中按F1,然后点击 “ C/C++: Edit Configurations (JSON) ” ,会弹出“ c_cpp_properties.json ”文件:
{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "C:\\Users\\15476\\Desktop\\new_project\\include" //添加include的路径 ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE" ], "windowsSdkVersion": "10.0.18362.0", "compilerPath": "E:/vs/MinGW/mingw64/bin/g++.exe", //注意此项,若为其它编译器的路径会报错 "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "windows-gcc-x64" //intelliSenseMode应与使用编译器一致 } ], "version": 4 }
-
配置“ tasks.json ” :
{ "tasks": [ { "type": "cppbuild", "label": "task g++", "command": "E:\\vs\\MinGW\\mingw64\\bin\\gcc.exe", "args": [ "-g", "${file}", "-I","C:\\Users\\15476\\Desktop\\new_project\\include", //-l参数就是用来指定程序要链接的库,添加include路径 "C:\\Users\\15476\\Desktop\\new_project\\read_column_numbers.c", //添加read_column_numbers.c路径 "C:\\Users\\15476\\Desktop\\new_project\\rearrange.c", //添加rearrange.c路径 "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${workspaceFolder}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务。" }, ], "version": "2.0.0" }
-
保存后回到test.c文件,按F5:
运行成功
-
参考链接
https://www.cnblogs.com/bpf-1024/p/11597000.html
https://blog.csdn.net/Penguuuuiiiiiiin/article/details/104191496?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=e5768c61-7e83-4ce6-bc2e-a8ce7efa03f3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
https://blog.csdn.net/wcx1293296315/article/details/85679715?utm_medium=distribute.pc_relevant_bbs_down.none-task–2allsobaiduenddefault-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task–2allsobaiduenddefault-1.nonecase