我正在尝试编写一个允许以下内容的 .clang 格式文件:
if (value.Is<bool>()) { index = 1; }
else if (value.Is<int>()) { index = 2; }
else if (value.Is<unsigned int>()) { index = 3; }
else if (value.Is<long long>()) { index = 4; }
else if (value.Is<unsigned long long>()) { index = 5; }
else if (value.Is<float>()) { index = 6; }
else if (value.Is<double>()) { index = 7; }
else if (value.Is<long double>()) { index = 8; }
else if (value.Is<std::string>()) { index = 9; }
else if (value.IsArray()) { index = 10; }
else { index = 0; }
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有我能找到的与中断和 allowShort* 相关的选项,无论我做什么,它似乎在第一个之后将它们分成多行,如下所示:
if (value.Is<bool>()) { index = 1; }
else if (value.Is<int>()) {
  index = 2;
}
...
Run Code Online (Sandbox Code Playgroud)
有没有我缺少的选项可以支持这个?
不幸的是,目前 if-else 语句不支持此功能,仅适用于简单的 if(截至修订版 329373,日期为 2018 年 6 月 4 日)。AllowShortBlocksOnASingleLine和选项AllowShortIfStatementsOnASingleLine不适用于 if-else 语句。  
希望这种情况将来会改变。
该文档并没有明确说明这一点,只是说这AllowShortIfStatementsOnASingleLine将允许在一行上使用简单的 if 语句:
AllowShortIfStatementsOnASingleLine (bool)
如果为 true,if (a) return;则可以放在单行上。
然而,clang 格式的代码表明 if-else 块不允许出现在单行上:
1)UnwrappedLineFormatter.cpp,tryMergeSimpleControlStatement:
// Only inline simple if's (no nested if or else).
if (I + 2 != E && Line.startsWith(tok::kw_if) &&
    I[2]->First->is(tok::kw_else))
  return 0;
Run Code Online (Sandbox Code Playgroud)
2)FormatTest.cpp,FormatShortBracedStatements测试。
   请注意测试参数,以及在单元测试中的预期格式中,else 始终位于其自己的行中,而没有 else 的普通 if 语句与其块位于同一行上,例如:
verifyFormat("if (true) {\n"
             "  f();\n"
             "} else {\n"
             "  f();\n"
             "}",
  AllowSimpleBracedStatements);
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1434 次  |  
        
|   最近记录:  |