括号是否应用于一行条件陈述?

时间:2012-11-08 11:12:00

标签: java c++ c

除了可读性之外,在使用和不使用brakets编写单行循环/条件语句时,性能或编译时间是否存在差异?

例如,以下内容之间是否存在任何差异:

if (a > 10) 
    a = 0;

if (a > 10)
{
    a = 0;
}

6 个答案:

答案 0 :(得分:5)

当然,性能没有区别。但引入错误的可能性存在差异:

if (a>10)
  a=0;

如果有人扩展代码并稍后写,

if (a>10)
  a=0;
  printf ("a was reset\n");

由于缺少大括号,因此将始终打印。有些人要求你总是使​​用大括号来避免这种错误。

答案 1 :(得分:4)

与几个答案相反,编译时存在有限但可忽略的性能差异。在运行时没有任何差异。

答案 2 :(得分:2)

不,没有区别,编译器会删除无意义的大括号,换行符等。

编译时间略有不同,但是如此微不足道,以至于你已经失去了阅读这个答案的更多时间,而不是你将以编译速度回归。随着计算能力的增加,这个成本会进一步下降,但降低可读性的成本却没有。

简而言之,做可读性,在任何其他意义上都没有任何有用的区别。

答案 3 :(得分:2)

机器代码不包含此类大括号。编译后,不再有{}。使用最易读的形式。

答案 4 :(得分:1)

当然,它们之间在运行时没有区别。 但是为了维护你的代码,你当然应该使用第二种方式。

为什么我这样说,假设将来你需要在你的if-else中添加更多行来扩展它们。然后,如果您的第一种方法包含在旧代码中,那么在添加一些新代码之前,您必须添加braces。在第二种情况下你不需要这样做。

因此,将来第二种方式的代码添加到第一种方式要容易得多。

此外,如果您使用第一种方式,则打算在semi-colon之后输入错误,例如if,如下所示: -

if (a > 0);
    System.out.println("Hello");

因此,您可以看到您的Hello将始终打印出来。如果您curly braces附加if,则可以轻松删除这些错误。

答案 5 :(得分:-1)

这取决于其他编码指南。我没有看到任何 如果开口括号总是在一条线上,则掉落大括号的问题 通过它自己。如果左大括号位于if行的末尾, 但是,我发现在添加内容时很容易忽略。所以 我会选择:

if ( a > 10 ) {
    a = 0;
}

无论行数,还是:

if ( a > 10 )
{
    //  several statements...
}

使用:

if ( a > 10 )
    a = 0;

只有一个陈述。然而,重要的是 所有代码都是一致的。如果您正在处理现有代码 使用几种不同风格的底座,我总是使用新的支架 代码,因为你不能指望代码风格,以确保它们 在那里,他们会在一个非常明显的位置。