干货分享:在Windows下使用Visual Studio搭建C语言开发环境_visual studio c语言-程序员宅基地

技术标签: 开发环境搭建  干货分享  编程入门  C  C语言  软件安装  

前言:本文将教大家如何使用 VIsual Studio Code 搭建 C 语言开发环境,包括使用 VS Code 如何编译和调试 C 语言程序,需要 用到的工具有 Visual Studio Code 、MinGw-w64 。

1. 安装 C/C++ 插件

C/C++ 是由 Microsoft 发布的支持 C/C++ 智能提示和调试等功能的插件,安装步骤如下:

使用快捷键Ctrl + Shift + X呼出扩展面板

在搜索框中输入:C/C++

再安装由Microsoft提供的名为C/C++插件

2. 安装 MinGW-w64 并配置好环境变量

首先下载 MinGW-w64点这里下载MinGW-w64 。下载完成之后我们开始安装 MinGw-w64,安装路径可以自由定义,我这里安装路径为D:\App\MinGW。安装时需要设置的安装选项如下:

Version :GCC 版本,直接选最高;

Architecture :CPU 架构,系统如果为64位,则选择 x86_64;

Threads :API 模式,使用默认选项;

Exception :异常处理方式,seh 仅针对 64 位架构,sjlj 则兼容 32 位架构;

Build revision :修订版本,使用默认选项;

安装过程中需要联网下载部分文件,由于网络问题安装失败的,可以点这里下载免安装版本。下载后直接解压在你想安装的文件夹。

然后我们要在安装路径中找到 bin 文件夹,通常在${MinGW-w64安装位置}\mingw64\bin,以我的安装路径为例,bin 文件夹位于D:\App\MinGW\mingw64\bin。

接下来,我们将刚刚获取的 bin 文件夹的路径添加到系统环境变量。

按 Win + R 键,打开运行窗口,,输入 sysdm.cpl 并回车;

在弹出的 系统属性 窗口,选择 高级 选项卡;

在 高级 选项卡找到 环境变量 按钮,单击 环境变量 按钮,打开 环境变量 窗口 ;

在 环境变量 窗口的 系统变量 区域找到 Path 变量 ,双击 Path 出现 编辑环境变量 窗口;

在 编辑环境变量 窗口点击 新建,在新建的这行输入我们刚刚获取的 bin 文件夹的路径,然后点确定。

 

3. 测试环境变量是否配置正确

在命令行(win +R,输入 cmd 回车打开命令行)输入gcc –version,如果返回的是已安装的 gcc 的版本信息,那么环境变量就配置正确了。

下面是在我的电脑上输入gcc –version的结果,可以看到我安装的版本为:gcc 7.3.0:

C:\Users\NowTime.CC>gcc --version

gcc (GCC) 7.3.0

Copyright (C) 2017 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

4. 创建和设置 C 语言开发工作区

在你的计算机中选择一个合适的位置,作为你的 C 语言开发工作区。建议工作区所在路径仅由字母、数字、下划线组成,不要包含其他的符号。例如空格,空格符号常常作为命令行中命令和参数的间隔符,如果路径包含空格会导致编译时出错。我创建的工作区的路径为:D:\Study\C\WorkSpace

由于

Windows 中文版命令行输出字符是 GB2312 编码的,而 VS Code 工作区默认是 UTF-8 ,这会导致你编写的 C

代码编译后在命令行执行并查看结果时中文会显示乱码,所以我们要单独针对工作区进行设置字符编码,保证程序输出的字符也采用跟命令行一致的 GB2312

编码,步骤如下:

使用 VS Code 打开你创建的工作区;

在 VS Code 左下角的设置按钮进设置,再点击 用户设置 旁边的 工作区设置 ;

在 工作区设置 中添加 "files.encoding":"gb2312"

5. 编写你的第一个 C 语言程序

在工作区新建一个 C 语言源文件命名为 hello.c ,输入以下内容:

#include <stdio.h>

#include <windows.h>

int main()

{

    printf("hello world!/n");

    system("pause");

}

6. 配置导入的头文件参数 c_cpp_properties.json

在编写完毕并保存之后,你可能会看到 #include 这句下面会有绿色波浪线,这是由于编译器没办法找到你所使用的头文件的所在位置。将光标移动到该行,行号左边会出现黄色小灯泡,点击会出现一个提示按钮:Add include path to setting,继续点击该提示,则会在工作区.vscode下生成c_cpp_properties.json文件。将文件修改成下面内容:

留意带注释部分的内容,需要将路径修改成你自己的安装路径哦。

{

    "configurations": [{

        "name": "MinGW",

        "intelliSenseMode": "gcc-x64",

        "compilerPath": "D:/App/MinGW/mingw64/bin/x86_64-w64-mingw32-gcc.exe",

        "cStandard": "c11",

        "cppStandard": "c++17",

        "includePath": [

            // 下面路径中的 D:/App/MinGw 部分需要替换成你的 MinGw-w64 安装路径

            "${workspaceFolder}/**",

            "D:/App/MinGW/mingw64/x86_64-w64-mingw32/include",

            "D:/App/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/7.3.0/include/c++",

            "D:/App/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/7.3.0/include/c++/tr1"

        ],

        "defines": [

            "_DEBUG",

            "UNICODE",

            "_UNICODE",

            "__GNUC__=7",

            "__cdecl=__attribute__((__cdecl__))"

        ],

        "browse": {

            "path": [

                // 下面路径中的 D:/App/MinGw 部分需要替换成你的 MinGw-w64 安装路径

                "${workspaceFolder}/**",

                "D:/App/MinGW/mingw64/x86_64-w64-mingw32/include",

                "D:/App/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/7.3.0/include/c++",

                "D:/App/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/7.3.0/include/c++/tr1"

            ],

            "limitSymbolsToIncludedHeaders": true,

            "databaseFilename": ""

        }

    }],

    "version": 4

}

7. 配置调试程序 launch.json

打开已经编写好的 hello.c ,然后按F5调试。因为是第一次调试,系统会弹出选择环境面板,这里选择C++(GDB/LLDB)。

选择运行环境后,VS Code 会在工作区.vscode文件夹下创建luanch.json模板文件并打开,将文件内容清空,复制下面的内容到文件中并保存:

留意luanch.json中注释内容,记得把“miDebuggerPath”参数修改成你自己安装位置里的 gdb.exe

gdb.exe位于{MinGW-w64安装位置}\mingw64\bin下面。

{

    "version": "0.2.0",

    "configurations": [{

        // 配置 VS Code 调试行为:

        "name": "GDB Debug", // 设置在启动配置下拉菜单中显示调试配置的名称。

        "preLaunchTask": "Compile", // 调试会话开始前要运行的任务。

        "type": "cppdbg", // 设置要使用的基础调试器。使用 GDB 或 LLDB 时必须是 cppdbg 。

        "request": "launch", // 设置启动程序还是附加到已经运行的实例。启动或附加 ( launch | attach ).

        "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 调试器将启动或附加的可执行文件的完整路径。

        "externalConsole": true, // 设置是否显示外部控制台。

        "logging": { // 用于确定应该将哪些类型的消息记录到调试控制台。

            "exceptions": true, // 是否应将异常消息记录到调试控制台。默认为真。

            "moduleLoad": false, // 是否应将模块加载事件记录到调试控制台。默认为真。

            "programOutput": true, // 是否应将程序输出记录到调试控制台的可选标志。默认为真。

            "engineLogging": false, // 是否应将诊断引擎日志记录到调试控制台。默认为假。

            "trace": false, // 是否将诊断适配器命令跟踪记录到调试控制台。默认为假。

            "traceResponse": false // 是否将诊断适配器命令和响应跟踪记录到调试控制台。默认为假。

        },

        // 配置目标应用程序:

        "args": [], // 设置调试时传递给程序的命令行参数。

        "cwd": "${workspaceFolder}", // 设置调试器启动的应用程序的工作目录。

        "environment": [], // 设置调试时添加到程序环境中的环境变量,例如: [ { "name": "squid", "value": "clam" } ]。

        // 自定义 GDB 或者 LLDB:

        "windows": {

            "MIMode": "gdb", // 指定 VS Code 连接的调试器,必须为 gdb 或者 lldb。

            "miDebuggerPath": "D:/App/MinGW/mingw64/bin/gdb.exe" // 调试器的路径,修改为你的安装路径

        },

        "miDebuggerArgs": "", // 传递给调试器的附加参数

        "stopAtEntry": false, // 设置调试器是否停止在目标的入口(附加时忽略)。默认值为 false。

        "setupCommands": [{ // 执行下面的命令数组以设置 GDB 或 LLDB

            "description": "Enable pretty-printing for gdb",

            "text": "-enable-pretty-printing", // 鼠标悬停查看变量的值,需要启用 pretty-printing 。

            "ignoreFailures": true // 忽略失败的命令,默认为 false 。

        }]

    }]

}

8. 配置调试前执行的任务 task.json

再按一次F5,会弹出“找不到任务”的提示窗口,点击配置任务按钮,如下图所示:

然后在弹出的命令面板选择使用模板创建task.json文件,如下图所示:

继续选择Others 运行任意外部命令的示例,如下图所示:

完成以上步骤之后,会在工作区的.vscode目录下生成tasks.json文件,并自动打开task.json文件。

接下来我们将task.json文件内容清空,复制下面的内容到文件中并保存:

{

    // 有关 tasks.json 格式的参考文档:https://go.microsoft.com/fwlink/?LinkId=733558 。

    "version": "2.0.0",

    "tasks": [{

        "label": "Compile",

        "type": "shell", // { shell | process }

        // 适用于 Windows 的配置:

        "windows": {

            "command": "gcc",

            "args": [

                "-g",

                "\"${file}\"",

                "-o",

                "\"${fileDirname}\\${fileBasenameNoExtension}.exe\""

                // 设置编译后的可执行文件的字符集为 GB2312:

                // "-fexec-charset", "GB2312"

                // 直接设置命令行字符集为 utf-8:

                // chcp 65001

            ]

        },

        // 定义此任务属于的执行组:

        "group": {

            "kind": "build", // { build | test }

            "isDefault": true // { true | false }

        },

        // 定义如何在用户界面中处理任务输出:

        "presentation": {

            // 控制是否显示运行此任务的面板。默认值为 "always":

            // - always:    总是在此任务执行时显示终端。

            // - never:    不要在此任务执行时显示终端。

            // - silent:    仅在任务没有关联问题匹配程序且在执行时发生错误时显示终端

            "reveal": "silent",

            // 控制面板是否获取焦点。默认值为 "false":

            "focus": false,

            // 控制是否将执行的命令显示到面板中。默认值为“true”:

            "echo": false,

            // 控制是否在任务间共享面板。同一个任务使用相同面板还是每次运行时新创建一个面板:

            // - shared:    终端被共享,其他任务运行的输出被添加到同一个终端。

            // - dedicated:  执行同一个任务,则使用同一个终端,执行不同任务,则使用不同终端。

            // - new:        任务的每次执行都使用一个新的终端。

            "panel": "dedicated"

        },

        // 使用问题匹配器处理任务输出:

        "problemMatcher": {

            // 代码内问题的所有者为 cpp 语言服务。

            "owner": "cpp",

            // 定义应如何解释问题面板中报告的文件名

            "fileLocation": [

                "relative",

                "${workspaceFolder}"

            ],

            // 在输出中匹配问题的实际模式。

            "pattern": {

                // The regular expression.

                "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",

                // 第一个匹配组匹配文件的相对文件名:

                "file": 1,

                // 第二个匹配组匹配问题出现的行:

                "line": 2,

                // 第三个匹配组匹配问题出现的列:

                "column": 3,

                // 第四个匹配组匹配问题的严重性,如果忽略,所有问题都被捕获为错误:

                "severity": 4,

                // 第五个匹配组匹配消息:

                "message": 5

            }

        }

    }]

}

9. 完成,enjoy it!

到这里,C 开发环境就已经配置完毕。接下来我们在hello.c的编辑窗口按F5运行下,看下效果。

如果你还想再创建其他的 C 语言开发工作区,我们只需要新建一个文件夹,再把现在已有工作区目录下的 .vscode 文件夹复制到新建的文件夹即可。


 点击了解更多资料,更有免费开源项目和课程等你观看哦!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45713725/article/details/109160971

智能推荐

react学习总结6--构建工具Gulp、Browserify(二)_react gulp-程序员宅基地

文章浏览阅读1k次。react 学习总结–构建工具Gulp、Browserify(二)1.html 文件处理gulp-htmlmin 插件 用于压缩html,可以进行配置,下边是配置信息(选填) var gulp = require('gulp'), htmlmin = require('gulp-htmlmin'); gulp.task('htmlmin', function ()_react gulp

开关电源输入:共模电感,X电容,Y电容,差摸电感理论计算!_共模电感和y电容在滤波方面的区别-程序员宅基地

文章浏览阅读7.6k次,点赞3次,收藏69次。转自:https://mp.weixin.qq.com/s/qp_DSBGKdjNo2-lO2s5v7Q引言在开关电源中,EMI滤波器对共模和差模传导噪声的抑制起着显著的作用。在研究滤波器原理的基础上,探讨了一种对共模、差模信号进行独立分析,分别建模的方法,最后基于此提出了一种EMI滤波器的设计程序。高频开关电源由于其在体积、重量、功率密度、效率等方面的诸多优点,已经被广泛地应用于工业..._共模电感和y电容在滤波方面的区别

IntelliJ IDEA 设置注释模板 (Mac)_mac idea 设置注解格式-程序员宅基地

文章浏览阅读7.9k次。类注释模板设置:点击 preferences ,搜索 File and Code Template ,在 Files tab 页下,选择 Class,在类名上面添加模板:/** * @program ${PROJECT_NAME} * @description: ${TODO} * @author: ${USER} * @create: ${YEAR}/${MONTH}/${DAY}..._mac idea 设置注解格式

sizeof用法 _sizeof(4.0+2)-程序员宅基地

文章浏览阅读2k次。Sizeof用法本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。1、 sizeof应用在结构上的情况请看下面的结构:struct MyStruct{double dda1;char dda;int type};对结构MyStruct采用_sizeof(4.0+2)

阅读小结:Large-Margin Softmax Loss for Convolutional Neural Networks_large-margin softmax loss的代码-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏4次。徐博最近一直在看我博客,肯定是想看我什么时候不更新,然后好嘲笑我。当然,不排除徐博已经爱上我的可能。What:改进SoftmaxLoss,显式的控制类内的距离,(不让 已经对的样本score太高,影响训练)可以防止过拟合。回顾SoftmaxLoss:1. Softmax 就是一个把一个向量归一的函数,输出也是向量。在matlab里就3行代码:% X_large-margin softmax loss的代码

后端java解析复杂嵌套json_java 解析复杂类型的json-程序员宅基地

文章浏览阅读6.2k次。其实不是很复杂百度翻译传过来的json数据:{"from":"zh","to":"en","trans_result":[{"src":"高度600米","dst":"Height 600 meters"}]}现在要取出dst对应的值:Height 600 meters String date="{"from":"zh","to":"en","trans_result":[_java 解析复杂类型的json

随便推点

如何高效地从BAM文件中提取fastq-程序员宅基地

文章浏览阅读1.8k次。在一年前,我写过一篇文章,叫做如何从BAM文件中提取fastq,之前也发现了从BAM里面提取Fastq是有些麻烦,只不过最后通过samtools的子命令实现了数据提取,实现功能之后也没有再去思考如何提高效率。最近读到每周文献-190419-植物单细胞BAM重比对以及假基因研究时,发现里面提到了一个工具叫做 bazam, 功能就是提取Fastq文件,文章发表在 Genome Bio..._10x 开发的工具 bamtofastq

中国电信天翼宽带无线路由器设置wifi笔记_中国电信wifi设置时间-程序员宅基地

文章浏览阅读8k次。0x00 前言 还记得电信天翼宽带吗?现在的天翼宽带的终端基本是华为的无限路由了,相信有不少同学在包装了中国电信天翼宽带后,个人申请到一个账号/密码,并且额外缴费得到一个路由器,然后就没有然后了。心里就纳闷,咋上wifi,然后又得另外花钱买个无线路由,然后不知道怎样弄。0x01 电信宽带的路由终端首先电信的华为路由器的底部都会贴有该终端的信息,例如终端登录地址,账号,密码等_中国电信wifi设置时间

让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件_编译msvc不依赖msvcr100.dll-程序员宅基地

文章浏览阅读853次。让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件正常情况下,当我们用VC编译出一个Console/Win32类型项目的exe程序时(这里暂不考虑MFC程序),会依赖于msvcrxx.dll文件(xx为不同VC对应的版本号,VC2005为80,VC2008为90,VC2010为100),发布程序的时候,就需要把对应的dll也cop_编译msvc不依赖msvcr100.dll

什么是问题?_问题是什么-程序员宅基地

文章浏览阅读4.6k次。今天看到一篇文章,说什么是问题?看到这个标题很好奇。就点进去看了一下。以下是总结和思考。漫漫人生中,我们总会遇到各种各样的问题。那么什么是问题呢?有以下一个定义:问题是目标与现状的差异。解决方案,就是现状到目标的路径。那么,什么是目标呢?目标应该是符合真实的需求。那么,什么是需求呢?需求不仅包含当前这个问题,有时候它更需要考虑到整个系统。打个比方说,有一天某个系统出现了超时问题,..._问题是什么

java中controller,service,serviceImpl,mapper,xml等几个文件的作用理解,以简单的查询为例_serviceimpl类的作用是什么-程序员宅基地

文章浏览阅读5.3w次,点赞59次,收藏278次。说明:最近一周都在写报表,样式很统一,上面是查询条件,下面是查询结果,页面如下图所示。由于要写很多报表,都是重复的工作,所以部门里的小哥哥在写了一个基于node的小程序,直接配置JSON文件,就可以生成报表模板,感觉很强(后面想学习一下)。作为一个优秀的CV工程师(复制粘贴),我也没怎么写前端的工作,直接用生成的模板就好了,但是后台的查询我还是稍微走心的。由于JAVA基础不是很好,总结的可..._serviceimpl类的作用是什么

java开发注释规范,开发人员代码注释规范.doc-程序员宅基地

文章浏览阅读111次。开发人员代码注释规范开发人员代码注释规范Java类版权及代码注释注释示例package java.blah;import java.blah.blahdy.BlahBlah;/** ==========================================================* Version Author Date Des..._huangzhihui java

推荐文章

热门文章

相关标签