【问题标题】:How to prevent clang-format from adding a single semicolon to a new line?如何防止 clang-format 将单个分号添加到新行?
【发布时间】:2017-04-04 04:42:44
【问题描述】:

我在 C++ 中有这行代码

while (fread(pixel_array++, sizeof(byte), 3, fp));

但是当我使用 clang-format 时,它会拆分分号并将其添加到新行中

while (fread(pixel_array++, sizeof(byte), 3, fp))
    ;

我不喜欢这种风格,我只是喜欢保持原来的风格。

我应该如何修改我的 clang 格式配置?谢谢。

【问题讨论】:

    标签: c++ coding-style clang clang-format


    【解决方案1】:

    clang-format 5.0 目前无法识别这种类型的循环。不幸的是,从 clang-format 版本 5 开始,您将无法获得满足您需要的设置。

    查找Clang Format Style Options,我发现最接近的是AllowShortLoopsOnASingleLine: true,但该设置无法将循环条件识别为循环体。

    只要 clang-format 不能识别这些类型的循环,我要做的就是在你的代码中用// clang-format off 标记它,然后在你的代码块周围用// clang-format on 标记它。

    【讨论】:

    • 非常感谢!这是一种权衡取舍的方式。
    • 2022 年 1 月,情况仍然如此。我本以为现在while(1);for(;;); 会被接受,但显然不会。另一个未讨论的选项是while(1) continue;,至少在我看来,它的意图是单行循环。
    【解决方案2】:

    显然这是不可能的,但一种解决方法是将分号替换为空块。如果AllowShortLoopsOnASingleLineAllowShortBlocksOnASingleLine 都设置了,那么它将被格式化为

    while (fread(pixel_array++, sizeof(byte), 3, fp)) {}
    

    【讨论】:

      【解决方案3】:

      fread 不返回 bool 和空的 while 循环没有意义。所以最好将你的代码重写为

      for(;;)
      {
          auto const read_bytes_count{fread(pixel_array, sizeof(byte), 3, fp)};
          if((sizeof(byte) * 3) != read_bytes_count)
          {
              // probably deal with error handling...
              break;
          }
          ++pixel_array;
      }
      

      【讨论】:

      • 这不能回答我关于 clang 格式配置的问题。另外,当fp到达EOF时,fread会返回0,程序会跳出while循环,但这不是重点。
      • fread 可以返回小于或等于请求字节数的任何值。如果它返回 1 或 2,您将留在未初始化的数据中,即使它返回 0,也不一定意味着已达到 EOF。所以错误检查是强制性的。我确实没有回答有关 clang 格式的问题,但那是因为您对此并没有真正的问题。你的问题是空循环体。
      • 我确实认为我的代码中不存在任何问题。我已经在前面的代码中得到了文件的大小,并且还正确地初始化了我的数组。我这样读取文件的方式是出于特殊需要。这只是我的代码的一小部分,如果你好奇,可以访问this link 查看我的所有代码。最后还是想了解一下clang-format的配置方式。
      • 您使用的是哪个版本的 clang-format?我尝试使用 clang 格式 4.0.1 编写代码。并且 clang-format 使您的代码保持不变。
      猜你喜欢
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2015-06-11
      • 2014-08-10
      相关资源
      最近更新 更多