是即时继续

Is continue instant?

本文关键字:继续      更新时间:2023-10-16

在下面的两个代码片段中,根据编译或运行的速度,实际上有什么不同吗?

for (int i = 0; i < 50; i++)
{
    if (i % 3 == 0)
        continue;
    printf("Yay");
}

for (int i = 0; i < 50; i++)
{
    if (i % 3 != 0)
        printf("Yay");
}

就我个人而言,在除了print语句之外还有很多内容的情况下,我一直在使用第一种方法来减少包含代码的缩进量。我想了一段时间,所以发现是时候问它是否真的有视觉以外的效果了。

回复Alf(我无法在评论中获得代码…)

对我的用法来说,更准确的是类似于"handleObjectMovement"函数的东西,它将包括

for each object
    if object position is static
        continue
    deal with velocity and jazz

与相比

for each object
    if object position is not static
        deal with velocity and jazz

因此我没有使用返回。本质上"如果与此迭代无关,请继续"

行为是相同的,所以运行时速度应该是相同的,除非编译器做了一些愚蠢的事情(或者除非禁用优化)。

无法判断编译速度是否存在差异,因为这取决于编译器如何解析、分析和翻译这两种变体的细节。

如果速度很重要,请测量它。

如果您知道条件的哪个分支的概率更高,您可以使用GCC可能/不可能的宏

完全取消检查怎么样?

for (int t = 0; t < 33; t++)
{
    int i = t + (t >> 1) + 1;
    printf("%dn", i);
}