惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyberwarzone
Cyberwarzone
F
Full Disclosure
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
J
Java Code Geeks
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
L
LINUX DO - 最新话题
T
Threatpost
S
SegmentFault 最新的问题
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
C
Cyber Attacks, Cyber Crime and Cyber Security
Google DeepMind News
Google DeepMind News
Know Your Adversary
Know Your Adversary
S
Schneier on Security
V
Vulnerabilities – Threatpost
D
DataBreaches.Net
G
GRAHAM CLULEY
Latest news
Latest news
P
Privacy International News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
L
Lohrmann on Cybersecurity
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
G
Google Developers Blog
L
LangChain Blog
MyScale Blog
MyScale Blog
Project Zero
Project Zero
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
N
News | PayPal Newsroom
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
T
Tor Project blog
C
Check Point Blog
Google Online Security Blog
Google Online Security Blog
GbyAI
GbyAI
The Last Watchdog
The Last Watchdog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
WordPress大学
WordPress大学

Hsu Yeung 的博客

三圣花市 | Hsu Yeung 的博客 网站支持 Live Photo 图片展示 | Hsu Yeung 的博客 梦 | Hsu Yeung 的博客 周末午餐 | Hsu Yeung 的博客 张家界 | Hsu Yeung 的博客 话剧《寻她芳踪·张爱玲》 | Hsu Yeung 的博客 博客自动生成文章目录 | Hsu Yeung 的博客 灭螂行动! | Hsu Yeung 的博客 张靓颖成都演唱会 | Hsu Yeung 的博客 最近对博客做的一些微调总结 | Hsu Yeung 的博客 Windows 上安装 Lua | Hsu Yeung 的博客 网站支持展示 B 站 iframe 视频 SpringBoot 中使用 RedisTemplate 存取整数值的坑 | Hsu Yeung 的博客 SQL JOIN 中 ON 与 WHERE 的区别 值得记录的一些工作近况 | Hsu Yeung 的博客 周传雄成都演唱会 | Hsu Yeung 的博客 并行操作导致获取数据库连接超时 | Hsu Yeung 的博客 风信子 | Hsu Yeung 的博客 Linux 安装并配置 Nginx | Hsu Yeung 的博客 使用 logrotate 切割 nginx 日志 郁金香土培结果 | Hsu Yeung 的博客 MySQL LEFT JOIN 右表有多条数据但只取最新的一条 | Hsu Yeung 的博客 获取数据库锁等待超时问题 | Hsu Yeung 的博客 从零开始挑选相机 | Hsu Yeung 的博客 郁金香 | Hsu Yeung 的博客 我的第一束花 | Hsu Yeung 的博客 快乐的一周 | Hsu Yeung 的博客 重庆,来了 | Hsu Yeung 的博客 散步 | Hsu Yeung 的博客 Git 工作区、暂存区、版本库之间的关系 | Hsu Yeung 的博客 Collectors.toMap() 操作 value 为 null 的情况 AOP 记录请求参数时序列化异常问题 | Hsu Yeung 的博客 第一次参加演唱会 | Hsu Yeung 的博客 MySQL FIND_IN_SET 函数的使用 | Hsu Yeung 的博客 自动拆箱机制导致编译失败 | Hsu Yeung 的博客 最近 | Hsu Yeung 的博客 夜爬龙泉山 | Hsu Yeung 的博客 在 Windows 上安装多个版本 JDK 并切换使用的版本 安装 Windows Terminal 和 gsudo 记录 意外的奖励 | Hsu Yeung 的博客 记第一次修热水器 | Hsu Yeung 的博客 在 Windows 电脑上调试 iPhone Safari 浏览器的网页 给网站加上 RSS | Hsu Yeung 的博客 打雷了 | Hsu Yeung 的博客 豉汁蒸排骨 | Hsu Yeung 的博客 我的 2022 年 | Hsu Yeung 的博客 如何使用 Git 给代码打 tag | Hsu Yeung 的博客 记一次有趣的上班经历 | Hsu Yeung 的博客 我记得 | Hsu Yeung 的博客 Spring 新增或修改请求 header 参数 | Hsu Yeung 的博客 Spring 事务传播机制 | Hsu Yeung 的博客 在家自制“周黑鸭” | Hsu Yeung 的博客 晚餐 | Hsu Yeung 的博客 如何解决逻辑删除与数据库唯一约束冲突 | Hsu Yeung 的博客 [转]漫画赏析:Linux 内核到底长啥样 | Hsu Yeung 的博客 数据库逻辑设计之三大范式通俗理解 | Hsu Yeung 的博客 计算机中的大小端是指什么 | Hsu Yeung 的博客 MySQL 学习笔记 | Hsu Yeung 的博客 [转]《玉子市场》的人物魅力 | Hsu Yeung 的博客 Linux 安装 Redis | Hsu Yeung 的博客 Linux 安装 MySQL | Hsu Yeung 的博客 Linux 安装 JDK | Hsu Yeung 的博客 [转]Thymeleaf 表达式工具类 | Hsu Yeung 的博客 Shell 基础入门介绍 | Hsu Yeung 的博客 Linux 中的软链接和硬链接 | Hsu Yeung 的博客 MySQL 将某些字段的值排在最前或最后 | Hsu Yeung 的博客 数据结构与算法学习笔记 | Hsu Yeung 的博客
Visual Studio Code 如何编写运行 C 程序?
2020-05-17 · via Hsu Yeung 的博客

1. 前言

自己以前写C语言一直用的是 Dev-C++ 这款 IDE,可是已经很久没有更新了,再加上我的电脑上 devc 经常崩溃,于是乎今天就研究了一下如何在“宇宙无敌好用的编辑器”中写 C 语言代码。

首先要知道,VSC 只是一个纯文本编辑器(editor),不是 IDE(集成开发环境),不含编译器(compiler)和许多其它功能,所以编译器要自己装好。

本文默认你已经安装好了 VSC,着重讲解如何配置 C 语言的编译环境。

2. 下载编译器

官网:MinGW-w64 - for 32 and 64 bit Windows

进去后不要直接点击下载,选择 Files,如下图:

MinGW 官网
MinGW 官网

然后往下翻,找到最新的版本。

不同版本
不同版本

下载下来后进行解压,解压路径尽量不要包含空格、中文。解压出来的目录结构如下:

解压出来的目录结构
解压出来的目录结构

这样 gcc 编译器就下载好了,接下来可以进行下一步了。

3. 配置环境变量

在桌面上找到“此电脑”,右键选择“属性”。

此电脑 -> 属性
此电脑 -> 属性

然后选择“高级系统设置”。

高级系统设置
高级系统设置

选择“环境变量”。

环境变量
环境变量

找到 Path 这一栏,然后双击进行编辑或者选中再点击编辑,在里面点击新建,将gcc编译器解压出来的那个文件夹下bin文件夹的路径写进去。因为我的安装目录为: D:\mingw64 ,所以 Path 里的路径填写为:D:\mingw64\bin

添加环境变量
添加环境变量

最后点击确定即配置完成。

最后验证环境变量配置是否成功,按 Win + R 再输入 cmd 打开 CMD 窗口,输入 gcc --version。如果显示下图这样则成功。

验证环境变量配置是否成功
验证环境变量配置是否成功

如果显示的是不是内部或外部命令,也不是可运行的程序则说明环境变量配置未成功,请仔细检查自己路径有没有填对。

4. 下载 VSC 扩展(插件)

  • C/C++:又名 cpptools,提供 Debug 和 Format 功能
  • Code Runner:右键即可编译运行单文件,很方便;但无法 Dubug

其他可选扩展:

  • Bracket Pair Colorizer 2:彩虹花括号
  • One Dark Pro:大概是 VS Code 安装量最高的主题

下载成功之后创建一个文件夹用于存放 C 代码文件,路径不能含有中文和引号,尽量不要有空格

然后打开 VSC,选打开文件夹;最好不要选“添加工作区文件夹”,选择你刚才创建好的文件夹,在你创建的文件夹里再创建一个名字为 .vscode 的文件夹

接下来再在 .vscode 目录下配置几个 json 文件。分别创建 launch.jsontasks.jsonsettings.json 文件,均放在 .vscode 目录下。

三个文件的内容如下:

  1. launch.json
{
  "version": "0.2.0",
    "configurations": [{
    "name": "(gdb) Launch",
    // 配置名称,将会在启动配置的下拉菜单中显示
    "type": "cppdbg",
    // 配置类型,cppdbg 对应 cpptools 提供的调试功能;可以认为此处只能是 cppdbg
    "request": "launch",
    // 请求配置类型,可以为 launch(启动)或 attach(附加)
    "program": "${fileDirname}/${fileBasenameNoExtension}.exe",
    // 将要进行调试的程序的路径
    "args": [],
    // 程序调试时传递给程序的命令行参数,一般设为空即可
    "stopAtEntry": false,
    // 设为 true 时程序将暂停在程序入口处,相当于在 main 上打断点
    "cwd": "${workspaceFolder}",
    // 调试程序时的工作目录,此为工作区文件夹;改成 ${fileDirname} 可变为文件所在目录
    "environment": [],
    // 环境变量
    "externalConsole": true,
    // 为 true 时使用单独的 cmd 窗口,与其它 IDE 一致;18 年 10 月后设为 false 可调用 VSC 内置终端
    "internalConsoleOptions": "neverOpen",
    // 如果不设为 neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对 gdb 手动输命令吧?
    "MIMode": "gdb",
    // 指定连接的调试器,可以为 gdb 或 lldb。但我没试过 lldb
    "miDebuggerPath": "gdb.exe",
    // 调试器路径,Windows 下后缀不能省略,Linux 下则不要
    "setupCommands": [{ // 模板自带,好像可以更好地显示 STL 容器的内容,具体作用自行 Google
      "description": "Enable pretty-printing for gdb",
      "text": "-enable-pretty-printing",
      "ignoreFailures": false
    }],
    "preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与 tasks.json 的 label 相对应
  }]
}

  1. settings.json
{
  "files.defaultLanguage": "c",
    // ctrl+N 新建文件后默认的语言
    "editor.formatOnType": true,
    // 输入分号(C/C++ 的语句结束标识)后自动格式化当前这一行的代码
    "editor.suggest.snippetsPreventQuickSuggestions": false,
    // clangd 的 snippets 有很多的跳转点,不用这个就必须手动触发 Intellisense 了
    "editor.acceptSuggestionOnEnter": "off",
    // 我个人的习惯,按回车时一定是真正的换行,只有 tab 才会接受 Intellisense
    // "editor.snippetSuggestions": "top", // (可选)snippets 显示在补全列表顶端,默认是 inline
    "code-runner.runInTerminal": true,
    // 设置成 false 会在“输出”中输出,无法输入
    "code-runner.executorMap": {
    "c": "cd $dir && gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=GBK && &'$dir$fileNameWithoutExt'",
      "cpp": "cd $dir && g++ '$fileName' -o '$fileNameWithoutExt.exe' -Wall -g -O2 -static-libgcc -std=c++17 -fexec-charset=GBK && &'$dir$fileNameWithoutExt'"
    // "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt.exe -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=GBK && $dir$fileNameWithoutExt",
    // "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt.exe -Wall -g -O2 -static-libgcc -std=c++17 -fexec-charset=GBK && $dir$fileNameWithoutExt"
  },
  // 右键 run code 时运行的命令;未注释的仅适用于 PowerShell(Win10 默认),文件名中有空格也可以编译运行;注释掉的适用于 cmd(win7 默认),PS 和 bash 也能用,但文件名中有空格时无法运行
  "code-runner.saveFileBeforeRun": true,
    // run code 前保存
    "code-runner.preserveFocus": true,
    // 若为 false,run code 后光标会聚焦到终端上。如果需要频繁输入数据可设为 false
    "code-runner.clearPreviousOutput": false,
    // 每次 run code 前清空属于 code runner 的终端消息,默认 false
    "code-runner.ignoreSelection": true,
    // 默认为 false,效果是鼠标选中一块代码后可以单独执行,但 C 是编译型语言,不适合这样用
    "C_Cpp.clang_format_sortIncludes": true,
  // 格式化时调整 include 的顺序(按字母排序)
}

  1. tasks.json
{
  "version": "2.0.0",
    "tasks": [{
    "label": "Compile",
    // 任务名称,与 launch.json 的 preLaunchTask 相对应
    "command": "gcc",
    // 要使用的编译器,C++ 用 g++
    "args": ["${file}", "-o", // 指定输出文件名,不加该参数则默认输出 a.exe,Linux 下默认 a.out
      "${fileDirname}/${fileBasenameNoExtension}.exe", "-g", // 生成和调试有关的信息
      "-Wall", // 开启额外警告
      "-static-libgcc", // 静态链接 libgcc,一般都会加上
      "-fexec-charset=GBK", // 生成的程序使用 GBK 编码,不加这一条会导致 Win 下输出中文乱码
      // "-std=c11", // C++ 最新标准为 c++17,或根据自己的需要进行修改
    ],
    // 编译的命令,其实相当于 VSC 帮你在终端中输了这些东西
    "type": "process",
    // process 是 vsc 把预定义变量和转义解析后直接全部传给 command;shell 相当于先打开 shell 再输入命令,所以 args 还会经过 shell 再解析一遍
    "group": {
      "kind": "build",
      "isDefault": true // 不为 true 时就要 ctrl+shift+B 手动选择了
    },
    "presentation": {
      "echo": true,
      "reveal": "always",
      // 执行任务时是否跳转到终端面板,可以为 always,silent,never。具体参见 VSC 的文档
      "focus": false,
      // 设为 true 后可以使执行 task 时焦点聚集在终端,但对编译 C/C++ 来说,设为 true 没有意义
      "panel": "shared" // 不同的文件的编译信息共享一个终端面板
    },
    // "problemMatcher":"$gcc" // 此选项可以捕捉编译时终端里的报错信息;但因为有 Lint,再开这个可能有双重报错
  }]
}

如图:

文件目录结构
文件目录结构

这样 VSC 的环境基本就 ok 了。

接下来就是写代码编译运行了。代码文件保存在工作区内都可以,可以自己建立文件夹(推荐),不必放到 .vscode 文件夹里,但路径里(包括文件名)不要含有中文和引号,最好不要有空格。

比如说我学习数据结构和算法的就专门一个文件夹,放在 VC-Code-C 这个文件夹下的,并没有放在 .vscode 目录下。写好代码之后可以直接点击右上角的三角形进行运行。

运行
运行

结果如下:

运行结果
运行结果

这样就完成了 Visual Studio Code 如何编写运行 C 程序的配置了。

当然,这只是一个入门,还有很多的操作比如说如何进行断点调试、如何编译多个源文件、如何写 C++ 代码就请各位自己多多研究啦,不懂的可以多百度 gcc 如何使用。

5. 相关链接