本文介绍了如何使用 Clang Format 来格式化 C++ 代码。

由于我平时使用 Java 较多,所以比较偏爱类似于 Java 的格式化风格。即大括号不换行,使用 4 个空格缩进等。

我的配置文件如下:

// 基于 LLVM 配置修改
BasedOnStyle: LLVM
// 语言 Cpp
Language: Cpp
// 使用空格而不是 Tab
UseTab: Never
// 缩进 4 字符
IndentWidth: 4
TabWidth: 4
// 访问修饰符(public)等靠左对齐
AccessModifierOffset: -4
// 最大列宽度
ColumnLimit: 90
// 是否允许短的函数,语句块等单独一行
AllowShortIfStatementsOnASingleLine: Never
AllowShortBlocksOnASingleLine: Empty
AllowShortFunctionsOnASingleLine: Empty
// 函数初始化元素右对齐
AlignArrayOfStructures: Right
// 函数返回值类型不换行
AlwaysBreakAfterReturnType: None
// 函数定义如果换行函数名需要缩进
IndentWrappedFunctionNames: true
// 函数的参数要么在同一行,要么各占一行
BinPackParameters: false
AllowAllParametersOfDeclarationOnNextLine: false

效果如下:

#include <vector>
using namespace std;

class Solution {
public:
    void backTrack(vector<vector<int>> &ret,
                   vector<int> &cur,
                   const vector<int> &candidates,
                   int index,
                   int sum,
                   int target) {
        if (sum == target) {
            ret.emplace_back(cur);
            return;
        }
        else if (sum > target) {
            return;
        } else if (index == candidates.size()) {
            return;
        } else {
            cur.emplace_back(candidates[index]);
            sum += candidates[index];
            backTrack(ret, cur, candidates, index, sum, target);
            sum -= candidates[index];
            cur.pop_back();
            backTrack(ret, cur, candidates, index + 1, sum, target);
        }
    }

    vector<vector<int>> combinationSum(vector<int> &candidates, int target) {
        vector<vector<int>> ret;
        vector<int> cur;
        int sum = 0;
        int index = 0;
        backTrack(ret, cur, candidates, index, sum, target);
        return ret;
    }
};