4

我有一个程序使用 for 循环来检查条件语句并对数据集运行测试,其中大多数是一个if可能分支的线性语句。我的问题是带括号的 for 循环如何决定范围内和范围外的内容?例如:

我的程序中的一个 for 循环:

for( i =0; i < (sizeof(exact_roots) / sizeof(bn_comlplex)); i++){
        if(fabs(roots[k].re - exact_roots[i].re) < 0.00001 && fabs(roots[i].im - exact_roots[i].im) < 0.00001)
            rootmatch++;
}

在这种情况下需要括号吗?for 循环会将第三行视为 for 循环的一部分还是将其丢弃并给我一个编译错误?

没有括号的 for 循环的极端情况怎么样,循环如何处理它?

for(i = 0; i < num; i++)
    if(something)
        ....
    else //is this still considered apart of the loop?
        ....
4

4 回答 4

5
for(i = 0; i < num; i++)
    if(something)
        ....
    else //is this still considered apart of the loop?
        ....

是的,它仍然是循环的一部分。整个if () .... else ...构造是一个语句。

但是使用牙套可以减轻您的担忧。使用大括号,可以立即清楚范围是什么。

于 2012-12-21T18:42:33.493 回答
4

只有下一条语句是循环的一部分。

在您的示例中,这if ... else ...;是一个声明。

于 2012-12-21T18:42:30.957 回答
1

我们可以变得非常极端:

for( i =0; i < (sizeof(exact_roots) / sizeof(bn_comlplex)); i++)
        if(fabs(roots[k].re - exact_roots[i].re) < 0.00001 && fabs(roots[i].im - exact_roots[i].im) < 0.00001)
            rootmatch++;
        else if (something)
           if (someother)
               do_stuff1();
           else if (third things)
                   do_stuff2()
                else
                   do_another();
        else
            do_failed();

当然,如果我对它进行代码审查,除非它有大括号,否则我不会接受它,因为很快你就会混淆哪个 if 在哪个里面,以及你在哪里结束了 else。

出于这个原因,我几乎总是在所有 if/while 内容周围使用大括号。使代码更容易阅读,如果易于阅读,则易于维护。

当然,当您突然决定在其中一个 if 语句中添加 "printf("x = %d\n", x); 时,添加额外的大括号会有所帮助,然后必须添加额外的大括号以确保您得到想要的效果并且没有编译器错误。

多余的[在合理范围内]大括号绝对没有错。它们不会增加执行时间,并且只在源代码中额外占用几个字节。当然,除非您将补丁发布到 linux 内核邮件列表,否则额外的大括号会导致代码被拒绝。

于 2012-12-21T19:15:18.087 回答
0

如果没有大括号,则只能在 for、if 和 else 语句下执行一个语句。大括号允许您包含一组复合语句并使您的代码更具可读性。

于 2012-12-21T18:51:25.470 回答