1TBS用于长条件表达式

时间:2011-03-29 08:17:32

标签: c indentation standards curly-brackets

重要提示:这个问题不是关于支撑风格优于另一支风格的优越性。我目前正在切换样式,以便自己评估哪一种我觉得在我的情况下效果最好,我喜欢Allman和1TBS一样。

1TBS支撑风格的用户,如何在if语句和后续代码中格式化长条件?

if ((this_is_the_first_part_of_a_long_condition)
    && (the_second_part_is_shorter__wait_no_it_is_not)
    && (and_one_more_for_the_road)) {
    here_comes_the_block_code();
}

我觉得必须有更好的方法。我目前的方法是在代码块的第一行之前添加一个空行。在这种情况下,Allman看起来也不是很好,虽然我认为更具可读性。

for循环的另一个例子:

for (int relevant_counter_variable_name = START_VALUE;
    intelligent_expression_that_may_include_the_counter_variable;
    relevant_counter_variable_update) {
    first_code_line_inside_the_block();
}

不太好......

KNF(缩进8个空格)会有所帮助,但我想避免这种情况。我还有其他一些选择,但我想知道是否有某种标准方式。

5 个答案:

答案 0 :(得分:9)

if (
    (this_is_the_first_part_of_a_long_condition)
    && (the_second_part_is_shorter__wait_no_it_is_not)
    && (and_one_more_for_the_road)
) {
    here_comes_the_block_code();
}

答案 1 :(得分:9)

我继续双行缩进:

if ((this_is_the_first_part_of_a_long_condition)
        && (the_second_part_is_shorter__wait_no_it_is_not)
        && (and_one_more_for_the_road)) {
    here_comes_the_block_code();
}

答案 2 :(得分:2)

为了绝对清晰和可读性,我只是浪费了一些变量:

cond1 = this_is_the_first_part_of_a_long_condition;
cond2 = the_second_part_is_shorter__wait_no_it_is_not;
cond3 = and_one_more_for_the_road;
if (cond1 && cond2 && cond3) {
    here_comes_the_block_code();
}

有! 1TBS的所有荣耀。没有风格混合。没有丑陋。缩进(1)可以在没有/* *INDENT-OFF* */作弊的情况下处理它。

您甚至可以为条件提供有意义的名称,例如

guidance = this_is_the_first_part_of_a_long_condition;
navigation = the_second_part_is_shorter__wait_no_it_is_not;
surgeon = and_one_more_for_the_road;
if (guidance && navigation && surgeon) {
    capcom_we_are_go_for_powered_descent();
} else {
    agc_alarm(1202);
}

答案 3 :(得分:1)

混合正匹配


我同意混合风格常常令人不悦 但是,我敢说,在可能的情况下,

如果样式 严格 强制执行,(公司编码政策)
我经常这样做:

if (  (this_is_the_first_part_of_a_long_condition) &&    
      (the_second_part_is_shorter__wait_no_it_is_not) &&
      (and_one_more_for_the_road)) {
                here_comes_the_block_code();  
}

只需对所有条件使用一级缩进,
以及括号内代码的另一个附加级别 这是可读的,不会冒犯任何纯粹主义者。

答案 4 :(得分:0)

每个级别的单个空格缩进,对每个条件使用括号,无论是否需要。

对于复杂的条件,Allman风格的括号可以很好地运作。

一般方法适用于延续不适合一行或代码函数列表的代码。

每个关闭元素在与开放元素相同的级别缩进,因此“));” for“Trace.WriteLine(String.Format(”and freestanding“;”for“return”。

YMMV。

   if (
    (
     (this_is_the_first_part_of_a_long_condition) && 
     (the_second_part_is_shorter__wait_no_it_is_not) && 
     (and_one_more_for_the_road) 
    ) ||
    (
     (this_is_the_first_part_yet_another) && 
     (
      (the_second_part_yet_another) ||
      (val < 22)
     )
    )
   ) {
      here_comes_the_block_code();

      int bits = 0
       | O_DEF
       | CONFIG_THIS
       | CONFIG_THAT
      ;

      FILE *OUPT = fopen(
       "/tmp/oupt.txt",
       "a+"
      );

      Trace.WriteLine(String.Format(
       "format {0} 0x{1:x8}"
       ,(eGenericDeviceFeatureEnum)val
       ,val & 0x7ffffc00
      ));

      return
       (CurrentWort != null) &&
       (CurrentWort.IsFeatureSupported(
        eGenericDeviceFeatureEnum.SupportsTriBromoCarcinogen
       ))
      ;
   }