忽略警告“ -Wunused-result”

DKP*_*DKP 2 c++ gcc gcc-warning

我是C ++的新手。

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

我确实在网上搜索,发现这是我可以通过声明一个来忽略它pragma。我没有太多的知识,pragma但是它说我必须写warning number才能忽略它。

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

码:-

freopen("input", "r", stdin);
freopen("output", "a", stdout);
Run Code Online (Sandbox Code Playgroud)

关于编译:

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

我发现我需要声明类似


#pragma warning( disable : number_of_warning )

tex*_*ell 10

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

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

什么工作是:

(void)!freopen("input", "r", stdin);
Run Code Online (Sandbox Code Playgroud)

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


Aru*_*run 5

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

  (void) frepoen("input", "r", stdin);
Run Code Online (Sandbox Code Playgroud)

对读者和编译器都清楚地表明返回值确实不是必需的。

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

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

  • 我正在使用g ++ 5.4,并且将返回值强制转换为void没有帮助。我仍然收到警告。 (3认同)