这是我正在尝试编译的一个函数:
static ssize_t output(t_out_buffer *buf, char const *src, size_t size)
{
size_t osize;
osize = size;
while ((size > 0)
&& (size -= write(buf->fd, src, size) < osize))
{
src += osize - size;
buf->count += osize - size;
osize = size;
}
if (osize < size)
return (T_OUT_BUFFER_ERROR);
else
return (buf->count);
}
gcc会抱怨:
t_out_buffer.c:11:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
&& (size -= write(buf->fd, src, size) < osize))
^
我曾认为,由于 size
是无符号的,所以 size -= whateverintiwant
也应该是无符号的,因为 osize
也是无符号的。但我现在认为我是错的,但我并不真正理解为什么。
此外,你能给我一些提示来消除这个问题吗?
write()
返回值为-1
,那么这段代码将会崩溃,因此你需要进行重写。请注意不要改变原意。 - Nate Eldredge