记录:在VSCode中运行C/C++程序

引言

很多时候为了提高代码运行效率,或者部署到各种设备上面,比如模型需要加速或者需要烤到单片机中我们使用C语言或者C++则会方便的多,现在Python流行,渐渐忘却了C语言与C++的好,现在我重新记录一下如何在VSCode中使用C/C++语言,方便以后再次使用时能有份清晰的参考,这篇文章将会无限更新,遇到问题都会记录在最后。

1、首先自然是安装VSCode

cs 复制代码
ms-vscode.cpptools    #C/C++

ms-vscode.cpptools-extension-pack        #C/C++ entension pack

ms-vscode.cpptools-themes        #C/C++ themes

MS-CEINTL.vscode-language-pack-zh-hans     # 中文简体

2、安装mingW-w64

  • 将这个包解压到你想解压的位置,比如D:\ProgramConfig\mw_15\mingw64,然后将这个目录添加为环境变量,并且将D:\ProgramConfig\mw_15\mingw64\bin添加到path中,这样就配置好了。
  • 在windows中启动一个cmd,输入以下指令进行测试:
cs 复制代码
gcc -v
# 或者
gcc --version
# 查看版本信息

g++ -v

gdb -v

# 都有输出的话代表配置成功

3、启动VSCode,打开你开始创建的PROJECTS项目文件夹

运行一个cpp文件

  • 创建一个test.cpp文件,写上下面的测试代码,习惯C++就用上面的,习惯C语言就用下面的,不能两个复制到同一个cpp中。
cpp 复制代码
//C++代码
#include <iostream>
int main()
{
    std::cout<<"Hello World!"<<std::endl;
    return 0;
}

//C语言代码
#include<stdio.h>
int main()
{
    printf("Hello World!\n"); 
    return 0;
}
  • 然后点击运行中的启动调试,然后点击gcc.exe或者g++.exe,C语言点击上面那个gcc.exe,C++点击下面那个g++.exe,看你自己的习惯,我建议点C++,因为C++兼容了C语言代码,但是gcc没法运行一些C++代码。
  • 完事运行成功之后会生成一个.vscode文件夹,下面会有一个task.json文件:
  • 这个就是json配置文件,如果你每次只允许一个cpp的话,那只要一个task.json基本上就够了之,这里给task.json写了一个注释以及教你如何修改:
bash 复制代码
{
    "tasks": [  // 任务数组,可以定义多个构建任务
        {
            "type": "cppbuild",  // 任务类型:C/C++ 构建任务
            "label": "C/C++: g++.exe 生成活动文件",  // 任务显示名称
            "command": "D:\\ProgramConfig\\mw_15\\mingw64\\bin\\g++.exe",  // 编译器路径
            "args": [  // 传递给编译器的参数
                "-fdiagnostics-color=always",  // 彩色诊断信息
                "-g",  // 生成调试信息
                "${file}",  // 当前活动文件          //!! 可修改的地方 如果你要运行多个文件,那么这里需要修改                      
                //"${fileDirname}\\*.cpp",          //!! 修改成这样则运行当前文件夹下的所有 cpp 文件
                //"${fileDirname}\\fileDirname\\*.cpp",             //!! 修改成这样则运行指定文件夹下的所有 cpp 文件
                "-o",  // 输出文件参数
                "${fileDirname}\\${fileBasenameNoExtension}.exe",  // 输出路径
                //"${fileDirname}\\fileName\\EXEname.exe",             //!! 运行多个文件的话这里需要修改成这样,保证编译成1个exe文件,你可以在中间指定你想保存的目录
            ],
            "options": {
                "cwd": "${fileDirname}"  // 工作目录设置为源文件所在目录
            },
            "problemMatcher": [  // 问题匹配器,用于解析编译错误
                "$gcc"  // 使用 GCC 错误格式解析器
            ],
            "group": {  // 任务分组
                "kind": "build",  // 构建类型任务
                "isDefault": true  // 默认任务
            },
            "detail": "调试器生成的任务。"  // 任务详细描述
        }
    ],
    "version": "2.0.0"  // tasks.json 格式版本
}

运行包含多个cpp的项目文件夹

  • 如果你不止运行一个cpp,而是运行某个文件夹下面的所有cpp,那么你需要进一步配置,首先按照下面的代码格式创建一个包含多项目的文件夹:
bash 复制代码
simple_cpp_project/
└── src
    ├── functions.h     (头文件)
    ├── functions.cpp   (实现文件)
    └── main.cpp        (主程序)
└── build
    └── EXEname.exe     (编译后程序)
  • 将对应的代码复制到对应的文件中:

functions.h

cpp 复制代码
// 简单计算函数的声明
int add(int a, int b);
int multiply(int a, int b);
void printMessage(const char* message);
double calculateAverage(double arr[], int size);

functions.cpp

cpp 复制代码
#include "functions.h"
#include <iostream>
#include <cmath>

// 加法函数
int add(int a, int b) {
    return a + b;
}

// 乘法函数
int multiply(int a, int b) {
    return a * b;
}

// 打印消息
void printMessage(const char* message) {
    std::cout << "消息: " << message << std::endl;
}

// 计算平均值
double calculateAverage(double arr[], int size) {
    if (size <= 0) return 0.0;
    
    double sum = 0.0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum / size;
}

main.cpp

cpp 复制代码
#include <iostream>
#include "functions.h"

int main() {
    std::cout << "=== 多文件C++项目测试 ===\n\n";
    
    // 测试加法
    int x = 10, y = 20;
    std::cout << x << " + " << y << " = " << add(x, y) << std::endl;
    
    // 测试乘法
    std::cout << x << " * " << y << " = " << multiply(x, y) << std::endl;
    
    // 测试打印消息
    printMessage("Hello from main!");
    
    // 测试计算平均值
    double numbers[] = {1.5, 2.5, 3.5, 4.5, 5.5};
    int count = sizeof(numbers) / sizeof(numbers[0]);
    std::cout << "数组平均值: " << calculateAverage(numbers, count) << std::endl;
    
    std::cout << "\n多文件编译测试完成!\n";
    return 0;
}

修改成适配多cpp的task.json,自己可以阅读一下哪些地方修改了,args里面参数的顺序也不要随便修改,这个C++就是如此娇弱,很容易因为位置不对导致报错,这里面最需要注意的就是fileDirname和workspaceFolder两者的不同,一个代表的是你运行文件所在的目录,一个是你的工作空间,就是你打开的项目所在的目录:

bash 复制代码
{
    "tasks": [  // 任务数组,可以定义多个构建任务
        {
            "type": "cppbuild",  // 任务类型:C/C++ 构建任务
            "label": "C/C++: g++.exe 生成活动文件",  // 任务显示名称
            "command": "D:/ProgramConfig/mw_15/mingw64/bin/g++.exe",  // 编译器路径
            "args": [  // 传递给编译器的参数
                "-fdiagnostics-color=always",  // 彩色诊断信息
                "-g",  // 生成调试信息
                "-std=c++17",                  // 添加C++17标准 还有其他的比如11 14 20等
                "-Wall",                       // 开启所有警告
                // "${file}",  // 当前活动文件          //!! 可修改的地方 如果你要运行多个文件,那么这里需要修改                      
                //"${fileDirname}/*.cpp",          //!! 修改成这样则运行当前文件夹下的所有 cpp 文件
                "${fileDirname}/*.cpp",             //!! 修改成这样则运行指定文件夹下的所有 cpp 文件
                //"${workspaceFolder}/src/*.cpp",   //!! 也可以写成这样,表示运行工作区下 src 文件夹中的所有 cpp 文件
                //workspaceFolder 代表当前打开的工作区根目录,fileDirname 代表当前文件所在目录
                // "${fileDirname}/${fileBasenameNoExtension}.exe",  // 输出路径
                "-o",  // 输出文件参数
                "${workspaceFolder}\\simple_cpp_project\\build\\project.exe",             //!! 运行多个文件的话这里需要修改成这样,保证编译成1个exe文件,你可以在中间指定你想保存的目录
            ],
            "options": {
                "cwd": "${fileDirname}"  // 工作目录设置为源文件所在目录
            },
            "problemMatcher": [  // 问题匹配器,用于解析编译错误
                "$gcc"  // 使用 GCC 错误格式解析器
            ],
            "group": {  // 任务分组
                "kind": "build",  // 构建类型任务
                "isDefault": true  // 默认任务
            },
            "detail": "调试器生成的任务。"  // 任务详细描述
        }
    ],
    "version": "2.0.0"  // tasks.json 格式版本
}
  • ++运行!!!启动!!!进入main.cpp,点击右上角三角形的下拉中的运行C/C++文件,执行多cpp项目的编译!++
  • 这样会生成exe文件在build文件夹下面,成功的话会输出:
  • 然后利用生成的exe文件就可以进行代码调试了!这需要配置launch.json,点击右侧的,按钮然后创建launch.json文件。
  • launch.json,这个文件用于你上面task.json编译后生成的exe文件的调试,参考如下,如果你成功添加了mingw-W64的环境变量,那么gdb的路径可以不用配置,当然配置了也行,只是不够优雅:
bash 复制代码
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program":"${workspaceFolder}/simple_cpp_project/build/project.exe",     //前面和task.json对应的exe输出路径
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/simple_cpp_project/build",                   //工作目录设置为exe所在目录
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "",                       //gdb的路径,如果已经添加到环境变量中则可以留空
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
  • 进入main.cpp,在你想要停止运行的地方数字左侧打上一个断电,然后点击运行下面的启动调试,或者按下键盘上面的F5键进入调试模式,这样运行到断点处程序就会停止在这里,方便你读取当前的变量类型和值,并且可以进行单步调试,一步一步运行找出你代码逻辑出现问题的地方:

4、结束

这样你的C/C++程序就运行起来了!当然可能还会遇到问题,但是只要一步一步来,按照我的步骤,绝对不会出错,有问题给我评论,我会及时回复!

相关推荐
小樱花的樱花2 小时前
C++访问权限:封装的艺术
开发语言·c++
liuyao_xianhui2 小时前
优选算法_岛屿数量_floodfill算法)_bfs_C++
java·开发语言·数据结构·c++·算法·链表·宽度优先
落羽的落羽2 小时前
【Linux系统】入门线程:线程介绍与线程控制
linux·服务器·c++·人工智能·stm32·单片机·机器学习
深邃-2 小时前
字符函数和字符串函数(2)
c语言·数据结构·c++·后端·算法·restful
bekote2 小时前
PTA基础编程题目集-6-11 求自定类型元素序列的中位数(简单解法)
数据结构·c++·算法
南境十里·墨染春水2 小时前
C++ 笔记 赋值兼容原则(公有继承)(面向对象)
开发语言·c++·笔记
森G4 小时前
29、QStringListModel 和 QListView---------Model/View模型视图
c++·qt
ALex_zry11 小时前
C++网络编程心跳机制与连接保活:长连接稳定性保障
开发语言·网络·c++
学嵌入式的小杨同学12 小时前
STM32 进阶封神之路(三十二):SPI 通信深度实战 —— 硬件 SPI 驱动 W25Q64 闪存(底层时序 + 寄存器配置 + 读写封装)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构