Vscode系列—c语言
vscode c语言在ubuntu windows下代码提示/补全,简单编译.
更新
1
218.03.24 ubuntu下代码提示/补全
18.10.05 新增win10下配置,补全简单编译.更新版本
导语
- 写嵌入式的c语言太难搞了,受够了盗版 sourceinsight 艰难的代码提示和补全之后,尝试换一款编辑器.
- 跨平台,支持多种语言,自由度高.
- vim 和 Emacs 命令行 有一点学习成本.
- 最后选定了 vscode 业余写点 python 和 java 写写 markdown 博客等等 (看pdf也行…).
环境
- vscode
- ubuntu/win10
- 注意vscode只是编辑器,其他的功能都是通过 插件 + 后端 实现的.
参考:
https://www.zhihu.com/question/30315894
https://code.visualstudio.com/docs/languages/cpp
需求
- 代码补全 最重要的c语言的结构体补全!!!.
- 结构体补全曾经深深折磨这我,直到遇到了clang…
- 顺带着解决了语法检查,clang的语法检查很是好用.
- 插件: C/C++ Clang Command Adapter
- 语法检查
- 常规clang足矣,Cppcheck作为补充.
- 插件: C/C++ Clang Command Adapter + cppcheck
- 代码格式化
- 眼瞅着clang 配套的clang-format .
- 插件: Clang-Format
- 函数跳转
- 微软官方c/c++插件就行了,但官方插件自带代码补全和语法检查,不怎么好,一定要关掉否则会与clang冲突.
- 插件: C/C++ for Visual Studio Code
安装
上文书说到,vscode实现编辑器以外的功能都需要插件+后端的形式 so 一般的安装步骤如下:
安装后端,如clang 、cppcheck 等.
安装对应插件
修改配置文件(json格式)
最后针对处理头文件等.
安装clang
- clang最新的版本为7.0,测试版8.0.这里选择7.0
Ubuntu
ubunt自带的clang 3.8版本,这里需要选择7.0版本.
参考 > https://apt.llvm.org/
修改ubuntu源 /etc/apt/source.list 添加llvm官方源
1
2deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main
deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main添加llvm源的 密钥
1
2wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
# Fingerprint: 6084 F3CF 814B 57C1 CF12 EFD5 15CF 4D18 AF4F 7421更新软件列表,这样就可以安装7.0版本了
1
sudo apt-get update
安装clang7.0
1
sudo apt-get install clang-7 lldb-7 lld-7
或者安装全部llvm root用户下(太多偷个懒)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# LLVM
# LLVM
apt-get install libllvm-7-ocaml-dev libllvm7 llvm-7 llvm-7-dev llvm-7-doc llvm-7-examples llvm-7-runtime
# Clang and co
apt-get install clang-7 clang-tools-7 clang-7-doc libclang-common-7-dev libclang-7-dev libclang1-7 clang-format-7 python-clang-7
# libfuzzer
apt-get install libfuzzer-7-dev
# lldb
apt-get install lldb-7
# lld (linker)
apt-get install lld-7
# libc++
apt-get install libc++-7-dev libc++abi-7-dev
# OpenMP
apt-get install libomp-7-dev完整安装需要良好的网络,llvm大概300M,等下就好.
验证
- 命令行输入 clang-7.0 不会提示无此命令即可.
win10
windows比较复杂一点,llvm的windows版本不带c语言的库文件等需要额外安装
MinGW-w64
,复制合并库文件.下载链接
- LLVM Download Page 下载 Clang 选Pre-Built Binaries中的Clang for Windows (64-bit),不需要下.sig文件.
- MinGW-w64下载MinGW-w64
llvm安装
- 添加环境变量时:选Add LLVM to the system PATH for all users(即第二项,不过第三项也差不多).
- Clang的安装路径(Destination folder)以C:\LLVM为例
MinGW-w64安装
- 路径随意.
- 安装结束后,将MinGW安装目录下所有文件剪贴到 C:\LLVM 下,没有合并错误.
验证
- 命令行 输入
clang -v
输出clang的版本- 提示错误,未找到命令.clang.exe在的文件夹C:\LLVM\bin 要加入没有在环境变量中,要加到path.
- 命令行 输入
gcc -v
输出gcc版本
- 命令行 输入
配置
代码补全/语法检查Lint
- 这里需要插件名 C/C++ Clang Command Adapter,在vscode中搜索下载即可.
网络环境限制还可以在vscode官网下载vsix格式的文件,离线安装. - 安装完成后,进入重头戏,也是初次上手vscode最难适应的地方.
clang插件及配置
进入vscode的设置
setting.json
,分为 用户区设置 和 工作区设置.- 用户区设置,是用户自定义全局设置,覆盖vscode默认设置,每个工程都有效.
- 工作区设置,是针对本工程的个性化设置,只在本工程生效.
- 简易是将clang等设置 保存在用户区,工作区保存追对 clang 的头文件设置.
用户区设置
Ubuntu
1
"clang.executable": "clang-7.0"
win10
1
"clang.executable": "clang"
- clang.executable : 后端clang的路径,默认是"clang". 而ubuntu 是 clang-7.0 ,也可以写入 clang 的安装目录.
win10不写也可以.
- clang.executable : 后端clang的路径,默认是"clang". 而ubuntu 是 clang-7.0 ,也可以写入 clang 的安装目录.
工作区设置
ubuntu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22"clang.cflags": [// 控制c语言静态检测的参数
"-std=c99",//c99兼容老项目,新项目直接c11
"-Wall",
"-I${cwd}",//头文件路径,一定要写全,否则一直会有错误提示.
"-I/usr/include",
"-I/usr/include/c++/5",
"-I/usr/include/x86_64-linux-gnu/c++/5",
"-I/usr/include/c++/5/backward",
"-I/usr/lib/gcc/x86_64-linux-gnu/5/include",
"-I/usr/local/include",
"-I/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed",
"-I/usr/include/x86_64-linux-gnu",
"-I/usr/include",
"-I${workspaceRoot}",
"-I${workspaceRoot}/Include",
"-I${workspaceRoot}/Libs/Cjson/Include"
],
"clang.completion.enable": true,//自动补全
"clang.completion.triggerChars": [//触发代码补全的输入常用的 . : >.
".",
":",
">"],win10
1
2
3
4
5
6"clang.cflags": [ // 控制c语言静态检测的参数
"--target=x86_64-w64-mingw",//Clang默认是msvc工具链,这里是MinGW
"-std=c11",
"-Wall"
],
"clang.completion.enable": true,
保存后,代码补全/语法检查 全部如上图所示.
编译检查
- 一般clang自带满足要求,有需要再加上 cppcheck (仅ubuntu)
安装cppcheck
我没有追求最新,直接通过ubuntu官方源安装
1
sudo apt-get install cppcheck
安装完成,执行 cppcheck 命令,不提示无此命令即可.
cppcheck插件及配置
搜索安装 cppcheck
同样配置分为用户区和工作区.工作区对应头文件设置.
用户区
1
2
3
4
5"cppcheck.cppcheckPath": null,
"cppcheck.standard": [
"c99",
],
"cppcheck.language": "c",- cppcheck.cppcheckPath : null时,会使用 cppcheck 命令指向的版本,也可以使用自定义路径.
- cppcheck.standard : cppcheck 检查时 c/c++版本,历史原因我这里还是 c99.
- cppcheck.language : 前置检查时 以 c 或者 c++ 检查.我这里都是 c 项目,填写 c .
工作区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16"cppcheck.includePaths": [
"${cwd}",
"/usr/include",
"/usr/include/c++/5",
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5/backward",
"/usr/lib/gcc/x86_64-linux-gnu/5/include",
"/usr/local/include",
"/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed",
"/usr/include/x86_64-linux-gnu",
"/usr/include",
"${workspaceRoot}",
"${workspaceRoot}/Include",
"${workspaceRoot}/Code/APP/Code/Libs/Cjson/Include"
],
"cppcheck.force": true- cppcheck.includePaths : 头文件路径,这里没有
-I
,直接输入路径即可.支持直接和间接路径. - cppcheck.force : 强制检查所有枚举所有可能配置,有多个项目同时在工作,这里我放到工作区了,如果代码量小的工程建议放在用户区,作为全局配置.
- cppcheck.includePaths : 头文件路径,这里没有
使用
左下角,点击cppcheck 如图
3个选择
- 分析当前打开文件
- 分析工作区所有文件
- 其他…没用过…
函数跳转
- 直接使用微软的 C/C++ for Visual Studio Code 即可.
- 官方的很强大,带代码补全和语法检查,可惜表现不太好.函数跳转很好用.
C/C++ 配置
搜索安装 C/C++ for Visual Studio Code
不用安装后端了,对应的配置就稍微麻烦了.
在项目根目录下 查找 .vscode文件夹,进入.应该由 setting.json文件,对应工作区设置.
新建c_cpp_properties.json ,写入配置内容.
Ubuntu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38{
"configurations": [
{
"name": "Linux",
"includePath": [
"/usr/include/c++/5",
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5/backward",
"/usr/lib/gcc/x86_64-linux-gnu/5/include",
"/usr/local/include",
"/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed",
"/usr/include/x86_64-linux-gnu",
"/usr/include",
"${workspaceRoot}",
"${workspaceRoot}/Include"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include/c++/5",
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5/backward",
"/usr/lib/gcc/x86_64-linux-gnu/5/include",
"/usr/local/include",
"/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed",
"/usr/include/x86_64-linux-gnu",
"/usr/include",
"${workspaceRoot}",
"${workspaceRoot}/Include"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 3
}win10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24{
"configurations": [
{
"name": "Win32",
"intelliSenseMode": "clang-x64",
"compilerPath": "C:/LLVM/bin/gcc.exe",
"includePath": [
"${workspaceFolder}",
"${workspaceFolder}/data structure/Binary tree"
],
"defines": [],
"browse": {
"path": [
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
将常用头文件路径添加到
includePath
和"browse"->"path"
下.可以不用手工添加,项目文件下,光标 指向提示找不到的 include 头文件 ,会有 💡 提示添加路径到path中,搞定!至此代码跳转应该可以使用了.
- ctrl 悬浮提示,点击跳转.还有其他快捷键爽翻天.
特别提醒
上文提到 C/C++ for Visual Studio Code 会与 clang 的代码提示和语法检查冲突,所以一定要记得在用户区设置关闭自带.
工作区设置
1
2
3"C_Cpp.autocomplete": "Disabled",//自动补全
"C_Cpp.errorSquiggles": "Disabled",//错误提示
"C_Cpp.formatting": "Disabled",//代码格式化
代码格式化
- 如果不需要太多调整,可以直接使用clang,无需clang-format
- 这里以clang-format(ubuntu)为例了
- 使用clang-7.0 配套的 clang-format-7.0即可.
- clang-format可以通过配置文件控制很多格式化细节.
安装clang-format
进行过 安装clang-7.0 后,执行如下命令即可.
1
sudo apt-get install clang-format-7.0
ubuntu官方源 为3.8版本,也可以安装使用,最好与clang版本保持一致.
clang-format配置
这里使用配置文件形式详细自定义格式化.(也可以直接使用自带的几种格式,同样够用)
用户区设置
1
2"clang-format.assumeFilename": ".clang-format",
"clang-format.executable": "clang-format-7.0",- clang-format.assumeFilename : 制定格式化的标准,这里是通过文件 .clang-format 来配置.还可以留空通过
clang-format.fallbackStyle
指定 LLVM, Google, Chromium, Mozilla, WebKit 之一为格式化标准. - clang-format.executable : clang-format路径,这里安装的是 clang-format-7.0.
- clang-format.assumeFilename : 制定格式化的标准,这里是通过文件 .clang-format 来配置.还可以留空通过
指定通过.clang-format文件为格式化标准后,在项目根目录下 新建 .clang-format 文件.
每个版本的 clang-format 都有对应的详细定制说明.7.0版本对应说明
官方有几个风格实例:
Linux Kernel style
1
2
3
4
5
6BasedOnStyle: LLVM
IndentWidth: 8
UseTab: Always
BreakBeforeBraces: Linux
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: false效果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24void test()
{
switch (x) {
case 0:
case 1:
do_something();
break;
case 2:
do_something_else();
break;
default:
break;
}
if (condition)
do_something_completely_different();
if (x == y) {
q();
} else if (x > y) {
w();
} else {
r();
}
}Visual Studio style
1
2
3
4
5
6UseTab: Never
IndentWidth: 4
BreakBeforeBraces: Allman
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: false
ColumnLimit: 0效果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30void test()
{
switch (suffix)
{
case 0:
case 1:
do_something();
break;
case 2:
do_something_else();
break;
default:
break;
}
if (condition)
do_somthing_completely_different();
if (x == y)
{
q();
}
else if (x > y)
{
w();
}
else
{
r();
}
}
最后是我的自定义配置(中文说明),从网上收集+官方文档.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80# 配置以什么语言format当前文件
# CPP: C, C++, Objective-C, ObjectiveC++;
Language: Cpp
#在llvm的配置基础上加定制配置
BasedOnStyle: LLVM
#someLongFunction(argument1,
# argument2);
AlignAfterOpenBracket: Align
# true: 表示对齐连续的紧跟注释(连续行使用双斜杠注释,包括在函数体内),多用于Model定义、property说明、私有成员变量说明;
AlignTrailingComments: true
#对齐连续赋值运算符
AlignConsecutiveAssignments : true
#若true,则对齐连续声明.
AlignConsecutiveDeclarations : true
#换行符选项 左对齐
AlignEscapedNewlines: Left
#水平对齐二目运算符和三目运算符的操作数
AlignOperands : true
# true:允许较短(一般只有一行,多为内联C函数)的Function在一行显示,如“int f() { return 1; }”,规定设为false;
AllowShortFunctionsOnASingleLine: false
#true: 允许较短的if判断在一行显示,否则换行显示(没有自动加花括号);
AllowShortIfStatementsOnASingleLine: true
#??? true 允许较短的循环(while、for)在一行显示,否则换行显示(没有自动加花括号);
AllowShortLoopsOnASingleLine: true
#true:允许只有Break语句的case标签在一行显示,false:不允许(自动换行显示), 规范为不允许
AllowShortCaseLabelsOnASingleLine: false
#true:允许将较长的literal-String字符串分割成多行显示;
AlwaysBreakBeforeMultilineStrings: false
BreakBeforeBraces: Allman
#连续行的缩进长度(通常缩进+设置值), 一般用于首参数小于后续参数的method名字、多行的String-literals
ContinuationIndentWidth: 4
#设置代码的最大长度(回自动对代码长度进行换行显示,并对注释自动换行;当长度加大的时候,AllowAllParametersOfDeclarationOnNextLine=true失效)
ColumnLimit: 100
#如果为真(true), 分析最常见的格式化文件中“&”和“\*”的对齐方式。pointeralignment则仅作为后备。
DerivePointerAlignment: true
#true: 将switch的case标签从switch表达式缩进一级;否则将switch表达式对齐;
IndentCaseLabels: true
#缩进字符长度
IndentWidth: 4
#所有位置的指针星号(*)或取地址符号(&)对齐位置:Left、Middle、Right,当作为乘号时候居中 (规范为Right)
PointerAlignment: Right
#整个文件任意位置最大能够保持的连续空行数(如果超过MAX值,减少到Max行,小于不管;)
MaxEmptyLinesToKeep: 2
#true:在赋值运算符之前添加一个空格,否则去掉;(规范为添加)
SpaceBeforeAssignmentOperators: true
#是否在括号之前添加一个空格,Never:任何情况都不添加;ControlStatements:只在控制结构(for、if、while)的地方添加空格;AlWays: 除开在function-like的的宏定义之外在任何地方都需要添加空格;(规范为ControlStatements)
SpaceBeforeParens: ControlStatements
#在紧跟注释之前所留空格数,一般建议为2个空格
SpacesBeforeTrailingComments: 2
UseTab: Never
# 格式兼容C++11
Standard: Cpp11
#当前配置生效开关,true:打开,false:关闭
DisableFormat: false
编译/调试
- 这里以win10为例了,ubuntu更为简单,不再赘述.
编译
- 这里的编译仅仅是小项目的简单使用,更专业的还是要ubuntu下使用 makefile, win10下使用批处理文件.
- 在
.vscode
文件夹下新建launch.json
和tasks.json
launch.json
win下面还是只能使用gdb作为调试器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Clang(gdb)-alone", // 配置名称,这里是单个c文件调试配置.
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,我一般设置为true
"cwd": "${workspaceFolder}", // 调试程序时的工作目录
"environment": [], // (环境变量?)
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
"MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但目前lldb在windows下没有预编译好的版本。
"miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则去掉
"setupCommands": [ // 用处未知,模板如此
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Build-alone" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应,这里是编译单个c文件
},
{
"name": "Clang(gdb)-dir", // 配置名称,这里是一个文件夹下仅一个main函数.
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,我一般设置为true
"cwd": "${workspaceFolder}", // 调试程序时的工作目录
"environment": [], // (环境变量?)
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
"MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但目前lldb在windows下没有预编译好的版本。
"miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则去掉
"setupCommands": [ // 用处未知,模板如此
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Build-dir" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应,这里是编译一个文件夹下仅一个main函数.
}
]
}
tasks.json
主要是编译等任务配置.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
},
{
"label": "Build-alone", // 任务名称,与launch.json的preLaunchTask相对应,编译单文件
"command": "clang", // 要使用的编译器
"args": [
"${file}",
"-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-g", // 生成和调试有关的信息
"-Wall", // 开启额外警告
"-static-libgcc", // 静态链接
"-fcolor-diagnostics", // 彩色的错误信息?但貌似clang默认开启而gcc不接受此参数
"--target=x86_64-w64-mingw", // clang的默认target为msvc,不加这一条就会找不到头文件;Linux下去掉这一条
"-std=c11" // C语言最新标准为c11,或根据自己的需要进行修改
], // 编译命令参数
"type": "shell", // 可以为shell或process,前者相当于先打开shell再输入命令,后者是直接运行命令
"group": {
"kind": "build",
"isDefault": true // 设为false可做到一个tasks.json配置多个编译指令,需要自己修改本文件,我这里不多提
},
"presentation": {
"echo": true,
"reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never。具体参见VSC的文档
"focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译c和c++来说,设为true没有意义
"panel": "shared" // 不同的文件的编译信息共享一个终端面板
}
},
{
"label": "Build-dir", // 任务名称,与launch.json的preLaunchTask相对应,编译文件夹
"command": "clang", // 要使用的编译器
"args": [
"${fileDirname}/*.c",//编译文件夹下所有c文件,so 只能由一个main函数
"-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-g", // 生成和调试有关的信息
"-Wall", // 开启额外警告
"-static-libgcc", // 静态链接
"-fcolor-diagnostics", // 彩色的错误信息?但貌似clang默认开启而gcc不接受此参数
"--target=x86_64-w64-mingw", // clang的默认target为msvc,不加这一条就会找不到头文件;Linux下去掉这一条
"-std=c11" // C语言最新标准为c11,或根据自己的需要进行修改
], // 编译命令参数
"type": "shell", // 可以为shell或process,前者相当于先打开shell再输入命令,后者是直接运行命令
"group": {
"kind": "build",
"isDefault": true // 设为false可做到一个tasks.json配置多个编译指令,需要自己修改本文件,我这里不多提
},
"presentation": {
"echo": true,
"reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never。具体参见VSC的文档
"focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译c和c++来说,设为true没有意义
"panel": "shared" // 不同的文件的编译信息共享一个终端面板
}
}
]
}
调试
- ctrl+shift+B单纯编译,按F5为运行并调试.不要把f5当作编译来使用,有的bug只产生警告,不会阻止编译,但越早期解决越好.
- 进入调试
结语
- 至此,vscode 编写c语言的体验就十分完整了.跨平台一致化的体验真的很好.推荐还在苦恼 c 编辑器的可以一试,只是非常麻烦.到底vscode开始还是为前端准备的.
- 下一篇vscode的 python 配置(已完成).