技术标签: 开发环境搭建 干货分享 编程入门 C C语言 软件安装
前言:本文将教大家如何使用 VIsual Studio Code 搭建 C 语言开发环境,包括使用 VS Code 如何编译和调试 C 语言程序,需要 用到的工具有 Visual Studio Code 、MinGw-w64 。
C/C++ 是由 Microsoft 发布的支持 C/C++ 智能提示和调试等功能的插件,安装步骤如下:
使用快捷键Ctrl + Shift + X呼出扩展面板
在搜索框中输入:C/C++
再安装由Microsoft提供的名为C/C++插件
首先下载 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 文件夹的路径,然后点确定。
在命令行(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.
在你的计算机中选择一个合适的位置,作为你的 C 语言开发工作区。建议工作区所在路径仅由字母、数字、下划线组成,不要包含其他的符号。例如空格,空格符号常常作为命令行中命令和参数的间隔符,如果路径包含空格会导致编译时出错。我创建的工作区的路径为:D:\Study\C\WorkSpace
由于
Windows 中文版命令行输出字符是 GB2312 编码的,而 VS Code 工作区默认是 UTF-8 ,这会导致你编写的 C
代码编译后在命令行执行并查看结果时中文会显示乱码,所以我们要单独针对工作区进行设置字符编码,保证程序输出的字符也采用跟命令行一致的 GB2312
编码,步骤如下:
使用 VS Code 打开你创建的工作区;
在 VS Code 左下角的设置按钮进设置,再点击 用户设置 旁边的 工作区设置 ;
在 工作区设置 中添加 "files.encoding":"gb2312"
在工作区新建一个 C 语言源文件命名为 hello.c ,输入以下内容:
#include <stdio.h>
#include <windows.h>
int main()
{
printf("hello world!/n");
system("pause");
}
在编写完毕并保存之后,你可能会看到 #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
}
打开已经编写好的 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 。
}]
}]
}
再按一次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
}
}
}]
}
到这里,C 开发环境就已经配置完毕。接下来我们在hello.c的编辑窗口按F5运行下,看下效果。
如果你还想再创建其他的 C 语言开发工作区,我们只需要新建一个文件夹,再把现在已有工作区目录下的 .vscode 文件夹复制到新建的文件夹即可。
文章浏览阅读1.3k次。图像的形态学处理有很多种,其中凸包处理是一种比较常见的高级方法,其主要原理是:生成一个凸多边形,这个凸多边形将图片中所有的白色像素点都包含在内的运算。Python中有相应的实现方法。形态学处理,除了最基本的膨胀、腐蚀、开/闭运算、黑/白帽处理外,还有一些更高级的运用,如凸包,连通区域标记,删除小块区域等。形态学目的如下:图像预处理(去噪声,简化形状)增强物体结构(抽取骨骼,细化,粗化,凸包,物体标记)从背景中分隔物体物体量化描述(面积,周长,投影,Euler-Poincare特征)_python opencv mask凸包计算
文章浏览阅读1.6w次,点赞7次,收藏13次。每一棵二叉树中都有左右两棵子树,子树中又有无数节点,那你们知道子树中的节点该怎么计算吗?快来跟小编了解一下吧。二叉树算法概念对于任何一棵二叉树来说,其叶子结点的数目为n0,且其度数为2的结点数n2,则n0=n2+1.证明:对于此二叉树:设其度数为1的结点数为n1. 从下往上看,每个结点都会有一个边朝上,除了根结点,则边总数为:N=n0+n1+n2-1 ①从上往下看,度数为2的结点有两个边,度数为1..._二叉树节点数计算
文章浏览阅读908次。英文说明1、可以与服务器联通,接发消息2、物联网 协议 supported by nvmsgbroker plugin is listed in the DeepStream Plugin guide_deepstream-test5
文章浏览阅读828次。记录,防止忘记!!!一 从现象入手Kmp算法 原始匹配方法: Kmp匹配算法(从三张图了解)总结发现:当pattern中第 j 处位置(j > 0)配不上时,让pattern中第m号元素与主串当前位置比较,m = pattern串中 j-1的next(即next[j - 1])+ 1.前缀:至少不含最后一个元素后缀:至少不含第一个元素于是有个大胆的想法:将上述图中这些蓝色字体封装成一个next数组(也叫match数组)..._kmp算法,next函数实验总结
文章浏览阅读1w次,点赞24次,收藏136次。WPS表格 JSA 学习笔记自定义公式单元格内文字颜色Sheet 工作表工作表引用Range单元格引用填写公式单元格赋值Cells 遍历单元格Sheet 范围内遍历Range 范围内遍历参考资料自定义公式function 加括号(区域, 左括号, 右括号){ return `${左括号}${区域}${右括号||左括号}`;}单元格内文字颜色function test(){ var len = Range("A1").Value2.length; for(let i = 1; i<=_wps jsa
文章浏览阅读4.7w次,点赞41次,收藏136次。今天是愉快的星期天,终于可以睡个懒觉了。今天是准备被这周的所以内容归纳一下的,然后看到的经典的杨辉三角形,所以就把代码整理了一下。给他取了个狂野的名字。==================================疯狂的杨辉三角形===================================1.普通的杨辉三角形 杨辉三角形的规则就是出意每行的第一个数字之外,..._python杨辉三角金字塔
文章浏览阅读1.5w次。SuperGo下载地址安装使用教程这里给大家分五个步骤进行教学第一步:打开MM/纵行地图/SuperGo软件的下载网站 www.tngps.com(用Safari浏览器进行操作),在APPstore下载并安装“TestFlight”软件,安装以 后就不用管这个软件了第二步:下载完“TestFlight”后,返回刚才的网站点击“开始测试”,下载MM软件并安装。第三步:打开MM/纵行地图/SuperGo软件后插入设备,等待数秒等待软件连接成功后进入操作界面。第四步:在“搜索.._supergo
文章浏览阅读358次。2019独角兽企业重金招聘Python工程师标准>>> ..._ios 怎么打印 imp
文章浏览阅读2.1k次。获取url参数主要有两种方法第一种是利用字符串的分割方法,将url以“&”和“=”做分割,得到参数数组,然后再利用数组的迭代方法中的filter()方法,筛选并返回我们需要的数据。function GetQueryString(name) { //获取url中“?”后边的部分,并将结果以“&”分割成数组 var paras = url.split('?')[1].spli_获取url参数的方法
文章浏览阅读824次,点赞2次,收藏4次。Linux系统优化1、更新yum官方源2、调整TCP/IP网络参数3、修改 SHELL 命令的 history 记录个数4、定时校正服务器时间5、关闭IPV6网络6、修改文件描述符限制7、配置网卡自启8、关闭文件记录时间增加磁盘IO9、优化ssh登陆总结优化脚本1、更新yum官方源Centos里面默认的官方源是很慢的,为了让安装软件更快,我i这里选择把源更换为阿里云的源(Centos 7.n)1)下载repo文件wget -P /etc/yum.repos.d/ http://mirrors.al_sed -i 's/histsize\=1000/histsize\=0/g' /etc/profile
文章浏览阅读380次。今天,我们来看一下LeetCode的第22道题:括号生成题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]思路:首先,我们要明确题目的要求,给出n对括号,生成这n对括号的所有..._c++括号逐步生成结果
文章浏览阅读1k次。作者:澎湃新闻见习记者 张唯 实习生 邹静祺据澎湃新闻(www.thepaper.cn)报道,刚刚获批的浙江大学人工智能本科专业将于2019年开始招生,学生纳入新设立的竺..._浙大图灵班课程设置