我是 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 )
正如其他答案所说,这些警告通常是有充分理由的。
但是,如果您需要抑制 gcc 中由
__attribute__ ((__warn_unused_result__))
引起的警告,通常的简单转换为 void 则不起作用。
有效的是:
(void)!freopen("input", "r", stdin);
根据
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425,仅凭
(void)
还不够,这是故意的
解决方法来自该错误报告中的comment 34。
如果要忽略函数的返回值,则一种可移植的方法是将其用
void
标记为:
(void) frepoen("input", "r", stdin);
这向读者和编译器明确表明返回值实际上是不必要的。
但是,如果重新打开一个文件(
freopen
),那么后续对该文件的读/写操作不是需要返回值(FILE *
)吗?
正如 Striezel 指出的,对于 stdin 和 stdout,虽然返回值对于后续的文件操作不是必需的,但对于错误检查可能仍然需要。失败时,
freopen
返回NULL。
您有多种选择:
忽略警告即可。意思是,每当屏幕上弹出该信息时,什么也不做,只需闭上眼睛即可。
告诉你的编译器不要发出警告(还没有检查这个特定的警告,但在大多数情况下你可以通过
-Wno-<warning-in-question>
(或使用pragma
)。如果您
真的想忽略它(您可能不想),请将返回值转换为
void
。通过实际使用变量/返回值(可能是您实际上想要的)来解决实际问题。
作为其他答案的附录 - 这个问题被标记为 C++,其他问题使用 C 风格的强制转换。对于 C++,使用
static_cast
忽略返回类型:
static_cast<void>(...);
在这种情况下:
static_cast<void>(freopen("input", "r", stdin));