- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我正在尝试编译的函数:
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);
}
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
也未签名。我现在假设我错了,但我真的不明白为什么。
最佳答案
这个表达式并没有像你想象的那样做:
(size -= write(buf->fd, src, size) < osize)
<
具有比复合赋值运算符更高的优先级
-=
.所以上面的解析为:
(size -= (write(buf->fd, src, size) < osize))
write
的输出类型为
ssize_t
与
osize
类型为
size_t
.这是有符号/无符号比较发生的地方。然后将此比较的结果从
size
中减去,所以它一次只会减少 1。
((size -= write(buf->fd, src, size)) < osize)
size_t
时,警告就会消失。与
size_t
.
write
返回 -1 则您将减去该值,即如果失败则加 1。
while (size > 0) {
{
ssize_t rval = write(buf->fd, src, size);
if (rval == -1) {
return T_OUT_BUFFER_ERROR;
}
size -= rval;
src += rval;
buf->count += rval;
}
关于对理解和消除 -Wsign-compare gcc 的警告感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59204768/
for ( i= 0; i < sizeof(r)/sizeof(r[0]); ++i ){ r[i]= 0; } 这就是我遇到问题的 for 循环,我该如何重写它,这样我就不会收到警
我最近遇到了以下问题。由于它有些棘手,我将其作为 future 人们的问答对。 根据这些问题(Unsigned hexadecimal constant in C?,C interpretation
这是我正在尝试编译的函数: static ssize_t output(t_out_buffer *buf, char const *src, size_t size) { size
当我分配一个成员变量作为大小的数组时,我看到了与我分配一个非成员变量时不同的符号转换警告行为。 如果我用 const int 类型的成员变量创建一个数组,我会得到一个 warning: convers
我最近注意到,当有问题的代码位于函数模板中时,g++ 不会发出有符号/无符号比较警告。这是一个示例: // signed_unsigned.cc #include #include templat
我有以下代码: template struct wrapper { T t; operator T() { return t; } T get() { return t; }
我有一个使用 64 位整数比较的代码。它看起来类似于以下内容: #include long long getResult() { return 123456LL; } int main()
我在使用我的 lex (flex 2.6.0) 扫描器规则时遇到问题,它看起来像: . { /* Place the char back and process statment normally
当编译代码访问结构中的常量以在 malloc 中使用时,我在使用 gcc -Wconversion sample.c 时收到 -Wsign-conversion 警告: sample.c:12:45:
这个问题在这里已经有了答案: Why is the enum incompatible with bit fields in Windows? (1 个回答) 关闭 5 年前。 请向我解释“-Wsi
我的 g++ gcc 版本 5.1.1 20150618 (Red Hat 5.1.1-4) (GCC) 似乎没有出现符号比较错误。 当我使用选项编译以下内容时,我没有收到错误 - 但当我去掉 con
这是一个 SSCCE ,显示了我的代码的简化版本,它仍然做了一些有用的事情: //Compile with -O3 -Wsign-conversion #include #include void
当我使用 g++ 编译我的 C++ 程序时 warning: comparison between signed and unsigned integer expressions [-Wsign-co
我能否将任意宽度的无符号变量中的所有位设置为 1,而不会使用相同的文字触发符号转换错误 (-Wsign-conversion)? 没有 -Wsign-conversion 我可以: #define A
#include #include #include #include using namespace std; int main() { vector vector_double;
我是一名优秀的程序员,十分优秀!