【发布时间】:2018-07-26 09:31:45
【问题描述】:
我有一个类似于BOOST_FOREACH 的foreach 样式宏,我希望其格式类似于以下:
int bar(int a) { return ++a; }
int bar(int a) {
a += 2;
return ++a;
}
int foo(std::vector<int> a) {
BOOST_FOREACH (auto i, a) {
++i;
}
for (auto &i : a) {
++i;
}
BOOST_FOREACH (auto i, a) {
++i;
i += 2;
}
for (auto &i : a) {
++i;
i += 2;
}
}
问题是我用作基础的 LLVM 样式是这样的:
BOOST_FOREACH (auto i, a) { ++i; }
BOOST_FOREACH (auto i, a) {
++i;
i += 2;
}
即将短/单行 foreach 宏循环体放在一行上,尽管它不会对正常的 for 循环执行此操作。
我找不到clang-format 选项。以下是我尝试过的,以 LLVM 样式为基础:
BreakBeforeBraces: Custom
BraceWrapping:
AfterControlStatement: true
给予:
BOOST_FOREACH (auto i, a)
{ ++i; }
for (auto &i : a)
{
++i;
}
这看起来可能是一个错误?
BreakBeforeBraces: Custom
BraceWrapping:
AfterFunction: true
几乎是我想要的,但它显然也影响了我不想要的功能:
int foo(std::vector<int> a)
{
BOOST_FOREACH (auto i, a) {
++i;
}
...
投入
AllowShortFunctionsOnASingleLine: false
只影响单行的bar 而不是foreach 宏,所以我不认为这是因为clang-format 将宏视为函数定义。
我是否遗漏了什么,或者这可能是clang-format 中的错误?
【问题讨论】:
-
您的
.clang-format是否包含ForEachMacros: [ BOOST_FOREACH ]? -
@Zeta 是的,这一切都在编辑
clang-format -style=LLVM -dump-config > .clang-format之后,其中包括该行,并带有clang-format6.0.0 -
你试过
AllowShortLoopsOnASingleLine: 'false'吗?
标签: c++ clang-format