在while循环中在括号内使用括号?

时间:2020-09-04 21:24:50

标签: c while-loop operators

我很难找到我的代码中的错误,结果是我在while循环中错过了一对括号,但我仍然不知道它的重要性。

为什么这些行彼此不同:

 while (( (bytes_read = read(inputFILE, buffer, BUFF_SIZE)) > 0))
 while (( bytes_read = read(inputFILE, buffer, BUFF_SIZE) > 0))

第二行是导致我在尝试将缓冲区写入文件时无论如何都只能写入一个字符的错误。这对额外的括号做了什么更改

具有正确行的整个循环为:

while (( (bytes_read = read(inputFILE, buffer, BUFF_SIZE)) > 0)){
        bytes_write = write(outputFILE, buffer, bytes_read);
        if (bytes_write != bytes_read)
            fatal("Couldnt write data to %s", argv[2]);

2 个答案:

答案 0 :(得分:4)

关系运算符>的优先级高于分配运算符=。因此,第二行代码解析为:

while (( bytes_read = (read(inputFILE, buffer, BUFF_SIZE) > 0)) )

换句话说,将read的返回值与0进行比较,然后将该结果(0或1)分配给bytes_read

答案 1 :(得分:3)

区别是:

(something = something_else) > 0

(将something_else分配给something,然后检查它是否大于零)

相比:

something = something_else > 0

相同
something = (something_else > 0)

(检查something_else是否大于0,然后将其分配给something)。

第一个将something_else的实际值存储在变量something中。第二个仅存储1或0,具体取决于它是否大于0。