我在用 C 编译程序时遇到此错误。
警告:忽略使用属性 warn_unused_result [-Wunused-result] 声明的“write”的返回值
我所有的电话写信。
FLAGS : -g -Wall -Werror -Wextra -g -O2 // or -Ofast (same result)
海湾合作委员会版本:5.4
当我尝试使用 -O2 或 -Ofast 进行编译时,就会发生这种情况。
有人可以解释一下,为什么这不起作用?
谢谢:)
嗯,它正在“工作”,但编译器认为你遗漏了一些东西,因为你忽略了返回值,所以它给你一个警告。不是错误,尽管您使用的是
-Werror
,因此它会将警告视为错误并失败。
有两种解决方案:
添加检查返回值并处理任何错误的代码;
int len = write(fd, buf, size);
if (len < 0) {
...
}
将调用投射到
(void)
,从而明确表示“此返回值在这里,但我没有使用它”。
(void) write(fd, buf, size);
由于 I/O 很脆弱并且可能会失败,因此第一种方法通常是最好的方法。