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