c++ - 格式化 foreach 宏与使用 clang-format 的循环相同
问题描述
我有一个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;
}
ie 将短/单行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
时无法正常工作,并会影响它,但实际上不应该。对我来说,该设置根本不起作用,这可能是问题的一部分(当我从 for-each 宏列表中删除时,行为是相同的)。BOOST_FOREACH
AfterFunction
ForEachMacros
BOOST_FOREACH
推荐阅读
- java - Spring Boot:YAML 配置未加载到 bean
- html - 如何在 SVG 周围画一个圆圈并填充
- python - 在Python中转换列表中的两个熊猫列
- sql-server - 从多个数据库中获取数据 - 动态数据库
- python - 基于其他数据帧索引在特定级别重新索引多索引数据帧
- bash - 如何在 Expect 脚本中使用 while 循环来显示某个提示?
- android - 从 jsoup android 获取音频 URL
- python - 我的 Amazon EMR 集群无法启动。如何解决 Python 依赖项?
- java - 我的java编码的两部分没有连接
- html - 切换器不展开