忽略警告“-Wunused-result”

ignoring warning "-Wunused-result"

我是 c++ 新手。

我想忽略警告 -Wunused-result,我猜它是因为 -Wall 标志而弹出的。

我在网上搜索了一下,发现这是我可以通过声明一个 pragma 来忽略它。我对 pragma 了解不多,但它说我必须写 warning number 才能忽略它。

什么是 warning number of -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 )

如果要忽略函数的 return 值,那么一种可移植的方法是用 void 将其标记为:

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

reader 和编译器都清楚地表明 return 值确实没有必要。

但是,如果文件被重新打开 (freopen),那么 return 值 (FILE *) 是否不是后续 read/write 操作所必需的文件?

正如 Striezel 所指出的,对于 stdin 和 stdout,尽管 return 值对于后续文件操作不是必需的,但对于错误检查可能仍然是必需的。失败时,freopen returns NULL。

您有多种选择:

  1. 忽略警告即可。意思是,当它出现在屏幕上时,什么都不做,闭上眼睛。

  2. 告诉你的编译器不要发出警告(没有检查这个特定的警告,但在大多数情况下你可以传递 -Wno-<warning-in-question>(或使用 pragma)。

  3. 如果您真的想要忽略它(您可能不想),请将 return 值转换为 void

  4. 通过实际 使用 variable/return 值来解决实际问题(可能是您 实际上 想要的).

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

但是,如果您需要在 gcc 中抑制由 __attribute__ ((__warn_unused_result__)) 引起的警告,通常的简单转换为 void 是行不通的。

有效的是:

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

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