VS Code 配置 C/C++ 开发环境

news2024/11/25 12:01:18

一、软件下载

需要下载的软件如下:

  • VS Code
  • 编译工具:MinGW 或 MSYS2 或 VS2022

VS Code 下载地址:链接
MinGW 下载地址:链接 或者 链接
MSYS2 下载地址:链接
VS2022 下载地址:链接

上述软件下载完成以后安装步骤安装即可,编译工具建议选择MinGW。如果安装MinGW可以使用GCC编译器,而安装VS2022则可以使用MSVC编译器。

二、环境配置

1. 添加环境变量

MinGWbin 文件夹添加到系统的 PATH 环境变量中。如果在命令行中执行以下代码并无错误提示,则表面添加成功。

gcc --version
g++ --version
gdb --version

输出结果如下:
在这里插入图片描述

2. 安装 VS Code 插件

需要安装三个插件,分别是:

  • C/C++
  • C/C++ Extension Pack
  • Atom One Dark Theme (可选,用于代码主题颜色)

在这里插入图片描述

三、编译器参数

1. GCC

参数说明示例
-c只编译源文件,生成目标文件,不进行链接
-o 指定输出文件的名称-o build\${fileBasenameNoExtension}.exe
-I <include_path>添加头文件搜索路径-I ${workspaceFolder}/include
-L <library_path>添加库文件搜索路径-L ${workspaceFolder}/lib
-l <library_name>链接指定的库文件-lgdi32
-g生成调试信息
-std=指定使用的语言标准-std=c11、-std=c++14
-O指定优化级别,级别可以是0、1、2、3、s
-Wall显示所有警告信息
-Werror将警告视为错误
-pthread启用对多线程的支持
-lm链接数学库
-mwindows去掉控制台窗口

2. MSVC

参数说明示例
/c只编译源文件,不链接生成可执行文件
/EHsc启用 C++ 异常处理支持
/Fo+路径指定中间文件路径/Fo${workspaceFolder}\build\${fileBasenameNoExtension}.obj
/Fe+路径指定目标文件路径/Fe${workspaceFolder}\build\${fileBasenameNoExtension}.exe
/I 添加包含文件目录
/D+name[=value]定义预处理宏
/W设置警告级别
/O设置优化级别
/Zi生成调试信息
/MD使用动态链接运行时库
/MT使用多线程静态链接运行时库
/link 传递链接器选项
/P生成预处理输出
/showIncludes显示包含的文件
/?显示帮助信息

四、配置文件

可参考文章 链接
在VS Code 中运行 C/C++ 代码,可以使用配置文件来指定:头文件路径、库文件路径、编译器路径等。配置文件既可以自动生成、也可以手动配置,但大多是时候自动生成的配置文件往往无法满足我们的要求,因此我们更多时候是需要手动配置的。主要包括三个配置文件:c_cpp_properties.jsontasks.jsonlaunch.json ,三个配置文件的作用如下:

  • c_cpp_properties.json:配置C/C++扩展的编译器路径和头文件搜索路径,保证代码分析和智能感知正常运行
  • tasks.json:配置执行任务,即在编辑器中执行的自定义命令或脚本
  • launch.json:配置调试器的启动和调试设置

1. 基本配置

c_cpp_properties.json

{
    "configurations": [
        // 32{
            "name": "Win32", // 当前配置的名称
            "includePath": [
                "${workspaceFolder}/**",
                "D:\\C\\VS2022\\Community\\VC\\Tools\\MSVC\\14.35.32215\\include" // 编译器的头文件路径
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            // 此处是你的 Windows SDK 版本号
            "windowsSdkVersion": "10.0.20348.0",
            // 此处是编译器的地址
            "compilerPath": "D:\\C\\VS2022\\Community\\VC\\Tools\\MSVC\\14.35.32215\\bin\\Hostx64\\x86\\cl.exe",
            "cStandard": "c17", // C 标准 
            "cppStandard": "c++17", // C++ 标准
            "intelliSenseMode": "windows-msvc-x86" // 智能感知的模式
        },
        // x64位
        {
            "name": "x64",
            "includePath": [
                "${workspaceFolder}/**",
                "D:\\C\\VS2022\\Community\\VC\\Tools\\MSVC\\14.35.32215\\include" // 编译器的头文件路径
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            // 此处是你的 Windows SDK 版本号
            "windowsSdkVersion": "10.0.20348.0",
            // 此处是编译器的地址
            "compilerPath": "D:\\C\\VS2022\\Community\\VC\\Tools\\MSVC\\14.35.32215\\bin\\Hostx64\\x64\\cl.exe",
            "cStandard": "c17", // C 标准 
            "cppStandard": "c++17", // C++ 标准
            "intelliSenseMode": "windows-msvc-x64" // 智能感知的模式
        }
    ],
    "version": 4
}

tasks.json

{
    "tasks": [
        {
            "label": "MSVC编译",
            "type": "shell",
            "command": "cmd.exe",
            "args": [
                "/c",
                // 编译器地址
                "D:\\C\\VS2022\\Community\\VC\\Auxiliary\\Build\\vcvars32.bat && cl.exe",
                "main.cpp",
                "/Zi",
                "/Od",
                "/EHsc",
                // 中间文件生成目录
                "/Fo${workspaceFolder}\\build\\${fileBasenameNoExtension}.obj", 
                // 目标文件生成目录
                "/Fe${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe", 
            ],
            "options": {
                "cwd": "${workspaceFolder}" // 作为当前打开目录
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        },
    ],
    "version": "2.0.0"
}

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: gcc.exe 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\A\\MinGW64\\bin\\gdb.exe", //此处为你的gdb.exe路径
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "MSVC编译"
        }
    ]
}

2. 删除文件任务配置

{
 "label": "删除中间文件",
 "type": "shell",
 "command": "cmd.exe",
 "args": [
     "/c",
     "del",
     "${workspaceFolder}\\build\\*.obj",  	// 删除build文件夹下的所有.obj文件
     "${workspaceFolder}\\build\\*.ilk",	// 删除build文件夹下的所有.ilk文件
     "${workspaceFolder}\\*.pdb",      		// 删除工作空间下的所有.pdb 文件
 ],
 "group": "build",
},

3. 编译、删除并执行

下面的 tasks.json 配置文件将依次执行:编译源文件、删除中间文件、执行可执行文件操作。

{
    "tasks": [
        // MSVC编译
        {
            "label": "MSVC编译",
            "type": "shell",
            "command": "cmd.exe",
            "args": [
                "/c",
                "D:\\C\\VS2022\\Community\\VC\\Auxiliary\\Build\\vcvars32.bat && cl.exe",
                "main.cpp",
                "/Zi",
                "/Od",
                "/EHsc",
                // 中间文件生成目录
                "/Fo${workspaceFolder}\\build\\${fileBasenameNoExtension}.obj", 
                 // 目标文件生成目录
                "/Fe${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe",
            ],
            "options": {
                "cwd": "${workspaceFolder}" // 作为当前打开目录
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        },
        // 删除中间文件
        {
            "label": "删除中间文件",
            "type": "shell",
            "command": "cmd.exe",
            "args": [
                "/c",
                "del",
                "${workspaceFolder}\\build\\*.obj",
                "${workspaceFolder}\\build\\*.ilk",
                "${workspaceFolder}\\*.pdb",
            ],
            "group": "build",
            "dependsOn": [
                "MSVC编译",
            ]
        },
        // RUN
        {
            "label": "RUN",
            "type": "shell",
            "command": "cmd.exe",
            "args": [
                "/c echo. && echo. && echo. && echo. && echo. && echo ================================================================================ && .\\build\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            }, // 作为当前打开目录
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "dependsOn": [
                "删除中间文件",
            ]
        },
    ],
    "version": "2.0.0"
}

五、问题解决

1. 执行代码控制台闪退问题的解决

方法一
修改 launch.json 文件中的 externalConsole 参数值为 false

"externalConsole":false

方法二
在主程序最后添加: system("pause");
方法三
在主程序最后添加: getchar();

2. 乱码解决

方法一
增添头文件<windows.h>并调用API函数SetConsoleOutputCP(65001)
在这里插入图片描述
方法二
更改VScode的编码格式为GBK,或者也可以将源代码文件用记事本打开并另存为ANSI编码格式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法三
修改VScode的setting.json配置文件,统一为一种编码格式即可。
在这里插入图片描述
方法四
Windows (中文) 默认的字符集是 Windows-936 (GBK),而 GCC 编译器默认编译的时候是按照 UTF-8 解析的,当未指定字符集时一律当作 UTF-8 进行处理,于是造成乱码。因此在GCC编译时添加以下参数即可解决。

-fexec-charset=gbk
-finput-charset=gbk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/552147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

入门JavaScript编程:上手实践四个常见操作和一个轮播图案例

部分数据来源&#xff1a;ChatGPT 简介 JavaScript是一门广泛应用于Web开发的脚本语言&#xff0c;它主要用于实现动态效果和客户端交互。下面我们将介绍几个例子&#xff0c;涵盖了JavaScript中一些常见的操作&#xff0c;包括&#xff1a;字符串、数组、对象、事件等。 例子…

Java【TCP 协议2】好多人都错了! 保证可靠传输的不是三次握手和四次挥手! 而是...

文章目录 前言一、确认应答1, 什么是确认应答2, 序列号和确认应答号 二、超时重传1, 什么是超时重传 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系…

蓝牙RFCOMM 协议

蓝牙RFCOMM 1.RFCOMM1.1 服务定义模型1.2 字节排序 2 RFCOMM数据帧2.1 选项和模式2.2 帧类型2.3 帧格式2.3.1 Address2.3.2 Control&#xff08;帧类型&#xff09;2.3.3 Length2.3.4 InfoData2.3.5 FCS 2.4 多路复用控制命令&#xff08;DLCI 0&#xff09;2.4.1 DLC paramete…

OpenCV基础操作(4)颜色空间转换、几何变换、图像二值化操作

OpenCV基础操作(4)颜色空间转换、几何变换、图像二值化操作 import cv2 as cv import numpy as np一、颜色空间转换 1、转换颜色空间 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会发现我们经常用到的也就两种&#xff1a;BGR↔Gray 和 BGR↔HSV。 我们…

《面试1v1》volatile

基本功 我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a; 你能解释一下 volatile 关键字的作用吗&#xff1f; 候选人&#xff1a; 当我们在编写多线程程序时&#xff0c;经常会遇到线程安全的问…

iptables防火墙(一)

iptables防火墙 一、iptables概述1、netfilter 与 iptables 的关系1.netfilter2.iptables 2、四表五链1.四表2.五链3.表的匹配优先级4.规则链之间的匹配顺序5.规则链内的匹配顺序 二、iptables防火墙的安装及配置方法1、iptables防火墙安装2、iptables防火墙的配置方法1.iptabl…

nginx(七十八)日志的深入探究

一 日志 ① nginx与日志相关的指令 access_log log_format error_log rewrite_log log_subrequest debug_connection rewrite_log limit_conn_log_level limit_req_log_level log_not_found open_log_file_cache uninitialized_variable_warn log_not_found …

【重新定义matlab强大系列八】利用matlab求局部值(函数islocalmax求局部最大值+函数islocalmin求局部最小值)

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

三控开关接线方式记录

参考原视频 三控开关与双控开关的多种接法&#xff0c;多控开关的工作原理_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Qh4y1J7gC/?spm_id_from333.337.search-card.all.click&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e原视频讲的不错&#xff0c;大家可以关…

国内好用的免费AI处理工具:Chat8(实现类似ChatGPT功能、TCP/IP通讯问题)

目前国外的ChatGPT比较火&#xff0c;朋友推荐了一个chat8&#xff0c;经过使用&#xff0c;觉得还不错&#xff0c;链接如下&#xff1a; https://ai.chat86.co/go/kl/775283&#xff0c;进去后可以直接用手机注册使用&#xff0c;以下是我问其关于TCP/IP的对话过程&#xff0…

(转载)从0开始学matlab(第11天)—关系运算符和逻辑运算符

选择结构的运算由一个表达式控制的&#xff0c;这个表达式的结果只有 true(1) 和 false(0)。有两种形式的运算符可以在 MATLAB 中关系得到 true/false&#xff1a;关系运算符和逻辑运算符。跟 C 语言一样&#xff0c; MATLAB 没有布尔型和逻辑数据类型。 MATLAB 把 0 …

模块一:k8s集群部署与安全配置

模块一&#xff1a;k8s集群部署与安全配置 目录 1、K8s安全运维概述 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PST6trat-1684674016197)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/1665822875941-73d822c8-7bdd-481c-acc1-df97b70c…

python爬虫实战——小说爬取

python爬虫实战——小说爬取 基于requests库和lxml库编写的爬虫&#xff0c;目标小说网站域名http://www.365kk.cc/&#xff0c;类似的小说网站殊途同归&#xff0c;均可采用本文方法爬取。 目标网站&#xff1a;传送门 本文的目标书籍&#xff1a;《我的师兄实在太稳健了》…

软件设计师第4题

首先&#xff0c;我是备考2023年上半年的考试。 一、历年考试题 历年的考题如下&#xff0c;从表中分析可以看出&#xff0c;动态规划法、排序算法、回溯法、分治法是很大概率考察的算法&#xff0c;尤其是动态规划法&#xff0c;本身其理解难度较高&#xff0c;且可以出的题型…

docker:容器的数据卷

1 数据卷概念及作用 1.1 什么是容器数据卷 先来看看Docker的理念&#xff1a; 将应用与运行的环境打包形成容器运行 &#xff0c;运行可以伴随着容器&#xff0c;但是我们对数据的要求希望是持久化的容器之间希望有可能共享数据 Docker容器产生的数据&#xff0c;如果不通过…

什么是人工智能的知识图谱?知识图谱的组成、构建、应用有哪些?

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一种通过计算机模拟人类智能的技术&#xff0c;其应用范围越来越广泛。知识图谱&#xff08;Knowledge Graph&#xff0c;KG&#xff09;则是人工智能技术中的重要组成部分&#xff0c;它是一种结构化…

Redis集群安装之主从集群

1.主从集群 Redis有三种集群模式&#xff0c;分别是&#xff1a;主从模式、哨兵模式、Cluster模式。Rdis最开始使用主从模式做集群&#xff0c;若master宕机需要手动配置slave转为master&#xff1b;后来为了高可用提出来哨兵模式&#xff0c;该模式下有一个哨兵监视master和s…

TCP实现HTTP服务

在之前的篇章中我们已经讲过七层参考模型了&#xff0c;今天我们从传输层实现应用层http服务 使用nodejs原生net模块就可以打通TCP传输层并且提供一个端口号进行监听 创建一个TCP服务 import net from netconst server net.createServer((socket) > {socket.on(data, (da…

【路径规划】基于人工蜂群算法的栅格法路径规划 机器人路径规划【Matlab代码#23】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 原始ABC算法2. 机器人路径规划环境创建3. 路径规划模型建立4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. 原…

【实时性】实时性优化的一些参数设置和心得

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…