忽略警告“-Wunused-result”

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

我是 c++ 新手。

我想忽略警告

-Wunused-result
,我猜它是因为
-Wall
标志而弹出的。

我在网上搜索发现这是我可以通过声明

pragma
来忽略它。我对
pragma
的了解不多,但它说我必须写
warning number
才能忽略它。

warning number
-Wunused-result
是什么,或者 还有其他我可以忽略的方法吗?或禁用此特定警告?

代码:-

freopen("input", "r", stdin);
freopen("output", "a", stdout);

编译时:-

warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]

我发现我需要声明类似的东西


#pragma warning( disable : number_of_warning )

c++ gcc gcc-warning
4个回答
22
投票

正如其他答案所说,这些警告通常是有充分理由的。

但是,如果您需要抑制 gcc 中由

__attribute__ ((__warn_unused_result__))
引起的警告,通常的简单转换为 void 则不起作用。

有效的是:

(void)!freopen("input", "r", stdin);

根据

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425
,仅凭(void)还不够,这是故意的 解决方法来自该错误报告中的comment 34


8
投票

如果要忽略函数的返回值,则一种可移植的方法是将其用

void
标记为:

  (void) frepoen("input", "r", stdin);

这向读者和编译器明确表明返回值实际上是不必要的。

但是,如果重新打开一个文件(

freopen
),那么后续对该文件的读/写操作不是需要返回值(
FILE *
)吗?

正如 Striezel 指出的,对于 stdin 和 stdout,虽然返回值对于后续的文件操作不是必需的,但对于错误检查可能仍然需要。失败时,

freopen
返回NULL。


3
投票

您有多种选择:

  1. 忽略警告即可。意思是,每当屏幕上弹出该信息时,什么也不做,只需闭上眼睛即可。

  2. 告诉你的编译器不要发出警告(还没有检查这个特定的警告,但在大多数情况下你可以通过

    -Wno-<warning-in-question>
    (或使用
    pragma
    )。

  3. 如果您

    真的
    想忽略它(您可能不想),请将返回值转换为void

  4. 通过实际使用变量/返回值(可能是您实际上想要的)来解决实际问题。


0
投票

作为其他答案的附录 - 这个问题被标记为 C++,其他问题使用 C 风格的强制转换。对于 C++,使用

static_cast
忽略返回类型:

static_cast<void>(...);

在这种情况下:

static_cast<void>(freopen("input", "r", stdin));
© www.soinside.com 2019 - 2024. All rights reserved.