忽略警告“-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。
您有多种选择:
忽略警告即可。意思是,当它出现在屏幕上时,什么都不做,闭上眼睛。
告诉你的编译器不要发出警告(没有检查这个特定的警告,但在大多数情况下你可以传递 -Wno-<warning-in-question>
(或使用 pragma
)。
如果您真的想要忽略它(您可能不想),请将 return 值转换为 void
。
通过实际 使用 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。
我是 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。
您有多种选择:
忽略警告即可。意思是,当它出现在屏幕上时,什么都不做,闭上眼睛。
告诉你的编译器不要发出警告(没有检查这个特定的警告,但在大多数情况下你可以传递
-Wno-<warning-in-question>
(或使用pragma
)。如果您真的想要忽略它(您可能不想),请将 return 值转换为
void
。通过实际 使用 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。