忽略警告“-Wunused-result”

新手上路,请多包涵

我是 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 )

原文由 laterSon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

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

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

读者和编译器都清楚地表明返回值实际上是不必要的。

但是,如果重新打开文件( freopen ),那么该文件的后续读/写操作是否不需要返回值( FILE * )?

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

原文由 Arun 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

起作用的是:

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

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

原文由 textshell 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题