我开始让代码检查函数的返回值,但我不确定在捕获一些错误后如何处理。
例如,在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
来显示消息并结束应用吗?
非常感谢。
答案 0 :(得分:1)
除非您迫切需要与不再可用的某人/某事进行沟通,否则通常会忽略此类函数的返回值。
如果您确实需要记录您的进度或失败,请打开一个日志文件并在那里写下您的所有消息(或使用类似syslog的内容)。
基本上,如果你正在使用stdio,那么很可能有人在某个时候将你的程序挂钩到一个管道(例如| less)或做一些其他会导致stdout消失的事情。
当忽略printf和puts的返回值时,像lint这样的程序会抱怨,但事实是99%的返回值在极端情况下是无用的。
答案 1 :(得分:1)
好吧,正如他们所说,如果有任何疑问,毫无疑问。
如果要确保所有案例都得到考虑,那么将纪律性思维纳入其中是非常好的。 但如果你不确定如何处理返回值,那么显然你不需要对它做任何事情。
要在代码中传达此决定,您可以通过将表达式转换为void来明确地丢弃返回值。
(void)puts("");
这将隐藏有关忽略返回值的任何警告消息。