C 中带括号和不带括号的循环处理方式不同吗?

2024-04-01

我在调试器中单步执行一些 C/CUDA 代码,如下所示:

for(uint i = threadIdx.x; i < 8379; i+=256) 
    sum += d_PartialHistograms[blockIdx.x + i * HISTOGRAM64_BIN_COUNT];

我完全困惑了,因为调试器一步就通过了它,尽管输出是正确的。我意识到,当我将大括号放在循环周围(如下面的代码片段所示)时,它在调试器中的行为符合预期。

for(uint i = threadIdx.x; i < 8379; i+=256) {
    sum += d_PartialHistograms[blockIdx.x + i * HISTOGRAM64_BIN_COUNT];
}

因此,在 C 或调试器中,无括号 for 循环的处理方式不同,或者可能是 CUDA 特有的。

Thanks


调试器执行一份声明一次。 看一下这个:

int sum = 0;                            /* one assignment statement */
for (int k = 0; k < 10; k++) sum += k;  /* one for statement */

并与此进行比较

int sum = 0;                            /* one assignment statement */
for (int k = 0; k < 10; k++)
{                                       /* for statement with the body
                                           in a block of statements */
    sum += k;                           /* assignment statement */
}

在上面的第一个例子中,sum += k是的一个组成部分for陈述;在第二个示例中,它本身就是一个完整的语句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中带括号和不带括号的循环处理方式不同吗? 的相关文章