c - C 中的行很奇怪

标签 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*/}

谁能解释一下这里发生了什么?

最佳答案

这样写可能会更容易理解:

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/

相关文章:

为我自己的 C 库创建手册页

for 循环与 while 循环的 C++ 行为

php - 为什么我的password_verify函数与我输入的正确密码不匹配并且知道数据库中的密码是什么

c - gdb 显示与代码中不同的地址

借助内置 C 数据类型创建您自己的 my128int 数据类型

for-loop - 如何在 Kotlin 中以数组索引作为起点/终点进行反向 for 循环?

algorithm - 编号三元组

ruby - 如何总结所有哈希值?

c - 将 va_list 传递给多个函数而不调用 va_arg

c++ - 使用模板变量循环不起作用?