c++ - 在不改变缩进的情况下重新格式化 C++ 大括号?

标签 c++ formatting coding-style indentation curly-braces

我们想让我们的 C++ 大括号样式更加一致。现在,我们的代码包含以下内容:

if (cond)
{
    // ...    
}
else
{
    // ...
}

...和:

if (cond) {
    // ...
} else {
    // ...
}

我们想专门使用后一种风格。

但是,我们不想更改代码的缩进。我尝试过使用 astyle、bcpp、GNU indent 和 Uncrustify(我还查看了 GreatCode 的命令行选项)。不幸的是,这些工具中的每一个都坚持重新缩进我们的代码,而且它们中的大多数都非常糟糕地破坏了 C++ 构造函数初始化列表和预处理器宏。

是否有任何 C++ 代码美化器可以修复大括号,同时保留缩进?它不必是一个预先存在的工具——如果你知道如何使用一些疯狂的 Perl 单线来做到这一点,那也很好。谢谢!

更新: 是的,我们知道这将导致难以阅读与旧代码的差异。这是一项推迟已久的代码清理工作,我们认为一致格式的日常优势胜过任何版本控制困难。

最佳答案

这是一个 Perl 单行代码,应该可以满足您的需求。

perl -pi.bak -e 'BEGIN { undef $/; } s/\s*?(\s?\/\/.*)?\r?\n\s*{/ {\1/g; s/}(\s?\/\/.*)?\r?\n\s*else\b(.*)/} else\2\1/g;'

原来是这样的:

int main(int argc, char *argv[])
{
    int something = 0;
    if (something)    // 5-12-2007
    {
        printf("Hi!\n");
    }
    else   // 5-13-2007
    {
        printf("Bye\n");
    }
    return 0;
}

进入这个:

int main(int argc, char *argv[]) {
    int something = 0;
    if (something) { // 5-12-2007
        printf("Hi!\n");
    } else { // 5-13-2007
        printf("Bye\n");
    }
    return 0;
}

关于c++ - 在不改变缩进的情况下重新格式化 C++ 大括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986321/

相关文章:

c++ - 关于 XML 解析

coding-style - 线宽格式标准

silverlight - WP7 视觉状态问题

node.js - 三元运算符不应在 Node.js 中的单行中使用。为什么?

c++ - 避免一对一关联关系中的样板代码

c++ - 带有 char 指针的 strcat

c++ - 链接到 c/c++ 库

python - 适用于 Python 的 Visual Studio Code 缩进

java - 右对齐整数 (Java)

java - 我应该使用大写命名来声明 java 常量变量吗?