我是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]
答案 0 :(得分:4)
如果要忽略函数的返回值,那么一种便携式方法是将void
标记为:
(void) frepoen("input", "r", stdin);
这清楚地表明读者和编译器都没有必要返回值。
但是,如果重新打开文件(freopen
),那么对文件的后续读/写操作不是返回值(FILE *
)吗?
正如Striezel指出的那样,对于stdin和stdout,如果后续文件操作不需要返回值,则可能仍需要进行错误检查。失败时,freopen
返回NULL。
答案 1 :(得分:2)
您有几种选择:
忽略警告。意思是什么都不做,只要在屏幕上弹出它就闭上眼睛。
告诉编译器不要发出警告(没有检查过这个特定的警告,但在大多数情况下,你可以通过-Wno-<warning-in-question>
(或使用pragma
)。
如果您 想要忽略它(您可能不会),则将返回值转换为void
。
通过使用变量/返回值(可能是实际想要的)来解决实际问题。
答案 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。