C - 是否有必要检查freopen返回值?

时间:2015-11-15 03:16:35

标签: c gcc

freopen的签名是FILE * freopen ( const char * filename, const char * mode, FILE * stream )

根据文档,返回值与stream的设置相同。所以,我的代码已经检查stream != 0,我是否需要检查返回值? stream == 0retval != 0怎么样?如果我不需要同时检查两者,如果我不检查retval,为什么gcc会给我一个警告?

要安静gcc,可以简单地执行:stream = freopen(filename, mode, stream); if (!stream) {...})

2 个答案:

答案 0 :(得分:5)

如果失败了,它不会将原始流变量(它没有引用,因为参数为FILE *而不是FILE **)神奇地设置为NULL,所以你确实需要检查返回值。

答案 1 :(得分:4)

你说:

  

根据文档,返回值与设置的流相同。

不符合http://en.cppreference.com/w/c/io/freopen

  

返回值
  1)成功时流的值的副本,失败时为空指针。

你问:

  

我需要检查返回值吗?

是的,你应该,永远。由于freopen可能失败的所有原因fopen可能会失败 - 权限,不存在的目录,打开的文件太多等等。最好始终检查{{1}的返回值在你使用它之前。