gpt4 book ai didi

c++ - 格式化foreach宏的格式与使用clang-format的循环相同

转载 作者:行者123 更新时间:2023-12-02 10:39:21 24 4
gpt4 key购买 nike

我有一个foreach样式宏,类似于BOOST_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中的错误。
格式化AfterControlStatement循环时,BOOST_FOREACH设置无法正常工作,而AfterFunction会影响该设置,但实际上不会。对我来说,ForEachMacros设置根本不起作用,这可能是问题的一部分(当我从for-each宏列表中删除BOOST_FOREACH时,行为是相同的)。

关于c++ - 格式化foreach宏的格式与使用clang-format的循环相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51535549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com