我从 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*/}
谁能解释一下这里发生了什么?
最佳答案
这样写可能会更容易理解:
for(
uint64_t tmp = 0, i = 0;
i < 65536/sizeof(tmp) && fread((char*)&tmp, sizeof(tmp), 1, handle);
hash += tmp, i++)
{
}
它声明两个变量,在每次迭代时修改两个变量(尽管不是相同的两个),并在继续条件下进行函数调用。这是表达这一点的更简洁的方式:
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;
}
关于c - C 中的行很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691254/