我在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*/}
有谁可以解释这里发生的事情?
答案 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;
}