警告:忽略使用属性 warn_unused_result [-Wunused-result] [关闭] 声明的“write”的返回值

问题描述 投票:0回答:1

我在用 C 编译程序时遇到此错误。

警告:忽略使用属性 warn_unused_result [-Wunused-result] 声明的“write”的返回值

我所有的电话写信。

FLAGS : -g -Wall -Werror -Wextra -g -O2 // or -Ofast (same result)

海湾合作委员会版本:5.4

当我尝试使用 -O2 或 -Ofast 进行编译时,就会发生这种情况。

有人可以解释一下,为什么这不起作用?

谢谢:)

c
1个回答
9
投票

嗯,它正在“工作”,但编译器认为你遗漏了一些东西,因为你忽略了返回值,所以它给你一个警告。不是错误,尽管您使用的是

-Werror
,因此它会将警告视为错误并失败。

有两种解决方案:

  1. 添加检查返回值并处理任何错误的代码;

    int len = write(fd, buf, size);
    if (len < 0) { 
        ...
    }
    
  2. 将调用投射到

    (void)
    ,从而明确表示“此返回值在这里,但我没有使用它”。

    (void) write(fd, buf, size);
    

由于 I/O 很脆弱并且可能会失败,因此第一种方法通常是最好的方法。

© www.soinside.com 2019 - 2024. All rights reserved.