检查'puts'返回值,然后是什么?

时间:2012-10-09 04:08:58

标签: c error-handling return-value

我开始让代码检查函数的返回值,但我不确定在捕获一些错误后如何处理。

例如,在fgets中:

while( fgets( rta, 3, stdin ) == NULL ) {
        printf( "Ocurrio un error al evaluar su respuesta. Intente nuevamente./n" );
}

但对于puts

它会在出错时返回EOF,所以我做了:

if( puts( "Message" ) == EOF ) {
    error handle...
}

问题是,如果失败,我会采取行动。我想在控制台中显示一条消息(这是一个控制台应用程序),但如果puts失败,那么我的消息也会失败。 (因为我也会使用puts)。

我应该使用assert来显示消息并结束应用吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

除非您迫切需要与不再可用的某人/某事进行沟通,否则通常会忽略此类函数的返回值。

如果您确实需要记录您的进度或失败,请打开一个日志文件并在那里写下您的所有消息(或使用类似syslog的内容)。

基本上,如果你正在使用stdio,那么很可能有人在某个时候将你的程序挂钩到一个管道(例如| less)或做一些其他会导致stdout消失的事情。

当忽略printf和puts的返回值时,像lint这样的程序会抱怨,但事实是99%的返回值在极端情况下是无用的。

答案 1 :(得分:1)

好吧,正如他们所说,如果有任何疑问,毫无疑问。

如果要确保所有案例都得到考虑,那么将纪律性思维纳入其中是非常好的。 但如果你不确定如何处理返回值,那么显然你不需要对它做任何事情。

要在代码中传达此决定,您可以通过将表达式转换为void来明确地丢弃返回值。

(void)puts("");

这将隐藏有关忽略返回值的任何警告消息。