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

我们想让我们的 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;
}

https://stackoverflow.com/questions/986321/

相关文章:

eclipse - 在 Eclipse 格式化程序中的花括号上强制 "same line"

c# - 格式异常 - 日期时间和小时

java - 如何在 Netbeans 中配置 Java 导入的组织

javascript - 有没有办法使用 Moment.js 解析相对日期?

javascript - 谷歌图表显示金钱而​​不是百分比

formatting - 是否可以使 PHP 错误看起来更好? Stack 可以在单独的行上跟踪输出

python - 如何用不同的表达式格式化原始字符串?

php - 在php中添加前导0

python - 在 Python 中将浮点列表转换为字符串

c# - 对信用卡号使用字符串格式