忽略警告" -Wunused-result"

时间:2016-11-13 16:17:43

标签: c++ gcc gcc-warning

我是c ++的新手。

我想忽略因-Wunused-result标志而弹出的警告-Wall

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

什么是warning number { {1}}或还有其他方法可以忽略或禁用此特定警告吗?

代码: -

-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]

3 个答案:

答案 0 :(得分:4)

如果要忽略函数的返回值,那么一种便携式方法是将void标记为:

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

这清楚地表明读者和编译器都没有必要返回值。

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

正如Striezel指出的那样,对于stdin和stdout,如果后续文件操作不需要返回值,则可能仍需要进行错误检查。失败时,freopen返回NULL。

答案 1 :(得分:2)

您有几种选择:

  1. 忽略警告。意思是什么都不做,只要在屏幕上弹出它就闭上眼睛。

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

  3. 如果您 想要忽略它(您可能不会),则将返回值转换为void

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

答案 2 :(得分:2)

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

但是,如果您需要在gcc中禁止由__attribute__ ((__warn_unused_result__))引起的警告,通常无法简单地强制转换为void。

起作用的是:

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

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