「Code」C/CPP

「Code」C/CPP

也可点击查看知乎文章

提前劝退提示:如果你只需要学习 C/C++,推荐国内老师改进的Dev-C++ - 小熊猫C++
我可能会经常更新,改改错字或者变换一下句子的顺序,但是主体内容不会变。
最后一次大更新:2022.03.24

0. VS Code安装及使用

下文必看! 下载安装VS Code、基本使用等等。

「Code」安装与基本操作

无论用VS Code搭建什么语言的开发环境,只需记住一个流程:
安装官方的SDK(编译器/解释器等等)-> VS Code里安装相应的支持扩展 -> 开始写代码

网上有很多配置方法(特别是C/C++),但是因为C/C++扩展在不停更新,很多已经过时了。特别是那些让你复制json,现在很多已经内置。

现在简单使用不用手动配置 json 文件。多文件项目也不用建议用 json,建议直接用 make、cmake 等工具

1. C/C++编译器配置

上面也说了,VS Code只算是个编辑器,编译还是要靠专门的编译器的。常见编译器(编译套件)情况如下:

Microsoft Visual C++
MSVC (C++)
GNU 编译套件
GCC (C/C++/…)
Clang (C/C++/…)
Windows 默认 有移植版 MinGW 及其衍生项目 MinGW-w64 / TDM-GCC … 有,但需要借助MSVC或MinGW的库
Linux X 默认/常用
macOS X 有,但 gcc 默认是 clang 的别名 默认

GCC 中 C 语言编译器是 gcc,C++ 编译器是 g++,调试器是 gdb
Clang 中 C 语言编译器是 clang,C++ 编译器是 clang++,调试器是 lldb
MSVC 中 C++ 编译器是 cl

Windows 和 Linux 我们选择常用的 GCC(Windows 上用 TDM-GCC);macOS 上则是 Clang。

1.1 Windows(安装版)- 推荐

下载:TDM-GCC - 联想软件商店 它不用你手动配置环境变量。

启动程序,取消勾选图中红框标记的地方,以取消检查更新(因为太慢了),点击“Create”安装。

安装完毕后需关闭所有打开的终端程序(包括 VS Code 等)确保环境变量生效。

打开终端输入gcc,如果提示你“gcc.exe: 致命错误:没有输入文件”,说明已经成功。

完成。

~ 1.2 Windows(便携版)- 不看都行

有些人看其他教程里会让你下载便携版本的编译器(就是一个压缩包),以MinGW-w64为例,那么使用时需要先将解压得到的“…\mingw64\bin”目录加入环境变量

这是官方给的下载链接MinGW-w64 - SourceForge。下载后将其解压到某个非中文目录(推荐C盘新建一个目录)。

Win10及以上版本在设置里搜素“环境变量”,点开会弹出一个“系统属性”,然后按照这个步骤选择解压后的“…/mingw64/bin”目录。选好后依次点确定保存。

完毕后需关闭所有打开的终端程序(包括 VS Code 等)确保环境变量生效。

打开终端输入gcc,如果提示你“gcc.exe: 致命错误:没有输入文件”,说明已经成功。

1.3 Linux(含 WSL)

反正只要保证有gdb、gcc、g++就可以,在终端中分别输入gccg++gdb,查看是否安装,没有的话自己用包管理器安装一下。如果有需要可以自己在最后加上make。

这里以Ubuntu为例,我们使用apt安装编译器gcc和g++,另外系统可能自带 gdb,为了保险还是加上。

sudo apt install gcc g++ gdb

1.4 macOS

确保安装了 Clang:

您的 Mac 上可能已经安装了 Clang。 要验证它是否存在,请打开 macOS 终端窗口并输入以下命令:

clang --version

如果没有安装 Clang,输入以下命令安装命令行开发者工具:

xcode-select --install

2. 安装C/C++扩展

打开一个目录,新建一个文件保存为“xx.c”或“xx.cpp”。

打开后它会自动提示安装C/C++扩展。(最近发现它会安装一个合集,其实不写大项目的话只装“C/C++”就行)

然后可以写个 C 或 C++ 的 HelloWorld 试试

// xx.c
#include <stdio.h>
int main() {
    printf("Hello World 哈哈\n");
    return 0;
}
// xx.cpp
#include <iostream>
int main() {
    std::cout << "Hello World 哈哈\n";
    return 0;
}

3. 通过“C/C++”运行、调试

注意!

  • Windows 上使用时文件路径不要包含中文,否则 VS Code 不能正常启动调试器。
  • macOS 用户运行要看3.3

如果打开其他人的源文件,发现乱码,或者显示正常但底部显示编码为 GBK/GB2312(应该看过我开头的文章打开了编码猜测):请看开头那篇文章的 1.5 那节,确保最终将编码保存为 UTF-8。

3.1 运行、调试的快捷按钮

请确保你的C/C++扩展版本大于1.9。

第一个正式的版本是1.9.7

这时打开相应的文件后右上角就会有运行和调试按钮。

  • 直接运行请点击“运行C/C++”按钮;
  • 需要调试请打断点并点击“调试C/C++”按钮。

然后自行选择编译器(图中只有一个我就直接回车了)。
选择 gcc 的话只能调试 C,选 g++ 的话 C/C++ 都可以调试选错了将 .vscode 目录删除即可重新选择。

运行时可能出现类似图中的蓝字,忽视即可。

~ 3.2 (旧版本)调试及无断点“运行”

必须打开一个文件夹。

自己提前按需要打断点,想直接运行就不打断点,再按F5就可以开始调试/运行了。

第一次调试时依次选“C++ (GDB/LLDB)” - “gcc/g++”,会自动生成打开launch.json和调试面板,不用管它,切换到终端即可。

运行时可能出现类似图中的蓝字,忽视即可。

3.3 外部终端运行

适用于 macOS用户 或 喜欢运行在弹出式的外部终端、内置终端显示不正常等情况。

Windows 上推荐前面两种,因为新建文件默认是 UTF-8 的,如果直接编译运行会乱码。但是扩展会自动 chcp 65001,将命令行切换到 UTF-8 代码页/编码下。但是这样在外部终端运行不会自动 chcp。

现在没有特别便捷的修改方式,只能改 json 让它在外部运行。
按下面操作,一键生成相应的调试配置。然后把“launch.json”中框起来的“false”改成“true”就行。

注意需要在return 0;前加上system("pause");getchar();,否则程序运行完会直接关闭。






下面的和终端中操作有关,是对新手来说稍微“高阶”的内容,可以留着等熟悉了当扩展看,现在不看也行。直接用GDB调试因为远不如上面通过VS code简单、直观,就不提了。

Windows 上因为编码原因极不推荐直接这么做。




~ 4. 直接运行单文件

~ 4.1 直接编译运行

其实我们学习时一般都是单文件程序,这时直接在终端中编译运行要比上面通过VS Code来调用 GDB 调试来运行方便多了。手动编译运行的方式:

  • 切换到当前目录
  • 编译C: gcc <源文件>.c -o <输出的程序名>
  • 编译C++: g++ <源文件>.cpp -o <输出的程序名>

想运行可以在终端里 ./<程序名> 运行,也可以直接双击运行(想双击运行请参照 3.3 最后一行防止运行完直接退出)。

~ 4.2 Windows 上直接运行乱码问题

开始那篇文章说了,Windows中文版命令行编码为 GBK,直接编译可能会有乱码问题,解决方式一是将文件编码改为 GBK,具体方法请参考最开始的文章。

但除了微软自家的VS,VS Code 等现代编辑器或IDE默认都是 UTF-8,改成 GBK 用 VS Code 调试时也会有乱码。所以建议全部新建 UTF-8。

  • 自己手动编译时在最后添加 -fexec-charset=gbk参数。这个参数的意思是让多字节字符串常量保存为指定编码(这里是gbk)。这样源文件编码是utf-8,也能直接运行。
  • 或者先执行chcp 65001,将命令行编码临时切换到 UTF-8,这样也能正常显示。

有些麻烦是吧,都是Windows中文版的祸。

~ 4.3 (存档,极不推荐)Code Runner

为什么不推荐,有很多原因。

  • 无法调试
  • 默认不是终端内打开,也不会运行时保存;
  • 运行程序名没有后缀,如xyz.a.c用它运行会出错 ;
  • 不能方便地自定义编译语句(GUI形式),自己改setting.json太麻烦;
  • 现在各种语言的官方扩展也添加了类似按钮,更用不上了,这个还会误导选择。

如果非要用

  • 建议设置中打开**“Run in Terminal”**,否则默认只有输出,而且可能出现奇怪的问题。
  • 另外建议将它的**“Save File Before Run”**也打开。又不然可能你调试时发现程序和你写的不一样,然后改了半天发现它没保存。