在了解如何使用 VS Code 编译调试 C/C++ 之前,先了解如何在 macOS 终端里直接编译 C/C++ 文件。在这之前需要安装必备的组建,可以直接在 App Store 安装 Xcode(体积约 10 GB),如果没有 iOS 开发的需要,可以在终端输入下方命令,仅安装部分必要的组件。

sudo xcode-select -–install

在命令行编译 C++ 文件

安装好必要组件,创建一个最的 C++ 文件。

#include <iostream>

int main(int argc, char* argv[]) {
	std::cout << "Hello World!" << std::endl;
    return 0;
}

然后进行编译运行

$ gcc -lstdc++ hello.cpp -o hello
$ ./hello
Hello World!

C++ 请使用 gcc -lstdc++ hello.cpp -o hello 进行编译。C 则可以不加 -lstdc++ 这个选项,直接 clang hello.c -o hello进行编译。这是由于编译程序会假设输入的文件为 C 语言,需要明确通过 -lstdc++ 来说明使用 C++ 标准。详细说明见 StackOverflow

This is the case even with the old 4.2 GCC (I experienced this when I set up my unofficial iOS toolchain). gcc assumes C by default, and invokes the linker without linking to the C++ standard library; in contrast, g++ assumes C++ and links against the C++ standard library by default.

安装 VS Code 必要插件

上述只是一个最简单的编译运行过程,程序慢慢复杂之后,编译参数会变得越来越长,每次手动维护编译命令是不现实的。好在 VS Code 许多插件可以把这个过程简化,配置一次,点击按钮就能编译运行,同时还提供了更好的语法高亮和补全。我们要用到的是 C/C++,在 VS Code 按下Shift + Command + X打开插件页面,在顶栏搜索 C 就能看到微软官方在的这个插件。

用 VS Code 编译 C/C++ 文件

VS Code 编译功能采用 Task 的形式。在使用 Task 之前需要进行配置,告知编辑器具体的细节。

点击 VS Code 菜单栏 Terminal > Configure Tasks,选择 Clang++ build active file,之后会在工作目录创建 .vscode/tasks.json 配置文件。按照下方配置好后按下 Command + Shift + B 即可编译当前窗口的文件。编辑器中将鼠标移至各项名称可以查看参数的具体描述,也可以查看参考资料:官网文档

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: clang++ build active file",
            "command": "/usr/bin/clang++",
            "args": [
                "--std=c++11",
                "${file}",
                "-o",
                "${workspaceFolder}/output/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

配置 Debug 调试程序

菜单栏依次点击 Run > Add Configuration… 然后选择 C++ (GDB/LLDB)。之后会自动生成一个 launch.json 默认的配置文件。

在代码行号前点击一次会出现小红点,这意味着该行代码已经打上断点。之后按下 F5 或者 Run > Start Debugging 即可进入调整页面。

使用 Code Runner 插件快速编译运行

除了官方提供的 Task 形式编译,推荐一个非常优秀的插件,在 VS Code 插件中搜索 Code Runner 插件,作者为 Han Jun,然后在设置中找到 code-runner.executorMap。点击编辑设置找到 cpp 一项,参考下方形式配置,保存后点击编辑器右上角的三角按钮即可编译并运行:

"cpp": "cd $dir && clang++ --std=c++11 $fileName -o $workspaceRoot/output/$fileNameWithoutExt && $workspaceRoot/output/$fileNameWithoutExt",

如果你的程序需要在命令行交互,将 code-runner.runInTerminal 设置为 true,这样程序会在 Terminal 运行,此时可以在终端输入一些信息,对刷算法题非常友好。