3

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

例如,在 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来显示消息并结束应用程序吗?

非常感谢。

4

2 回答 2

1

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

如果您确实需要记录您的进度或失败,请打开一个日志文件并在其中写入所有消息(或使用 syslog 之类的东西)。

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

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

于 2012-10-09T04:16:42.370 回答
1

好吧,正如他们所说,如果有任何疑问,那就没有疑问。

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

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

(void)puts("");

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

于 2012-10-09T05:36:08.643 回答