奇怪的是C中的线

时间:2014-05-16 01:26:46

标签: c for-loop hash

我在OpenSubtitles网站上看到了这行代码。 它使用一个简单的(如果我们排除这一行)算法从电影中生成一个哈希值。

代码行是这样的:

for(uint64_t tmp = 0, i = 0; i < 65536/sizeof(tmp) && fread((char*)&tmp, sizeof(tmp), 1, handle); hash += tmp, i++);

不知道......所有动作都发生在for,而不是我多年来熟悉的格式......

for (x=0; x<=5; x++)
{/*do something here*/}

有谁可以解释这里发生的事情?

1 个答案:

答案 0 :(得分:1)

如果你这样写它可能会更容易理解:

for(
    uint64_t tmp = 0, i = 0; 
    i < 65536/sizeof(tmp) && fread((char*)&tmp, sizeof(tmp), 1, handle); 
    hash += tmp, i++)
{
}

它声明了两个变量,在每次迭代时修改两个变量(虽然不是相同的两个),并在continue条件下进行函数调用。这是一种更简洁的表达方式:

uint64_t tmp = 0;
uint64_t i = 0;
size_t res;
while (1)
{
    if (i >= 65536/sizeof(tmp))
        break;
    res = fread((char*)&tmp, sizeof(tmp), 1, handle);
    if (!res)
        break;
    hash += tmp;
    ++i;
}