1

在我的代码中很多时候我都有这样的块:

close(READ);
dup(fd[READ]);
close(fd[READ]);
execl("ay", "bee", NULL);

如何避免一堆

if (close(READ) == -1) {
    perror("close");
    exit(EXIT_FAILURE);
}
...repeat for each function...

或者有什么好的做法来处理这个问题?

我试过这样的事情:

void test_returns(int result, char * err) {
    if (result == -1) {
        perror(err);
        exit(EXIT_FAILURE);
    }
}

/* code */
test_returns(close(READ), "close");
test_returns(dup(fd[READ]), "dup");
test_returns(close(fd[READ]), "close");
test_returns(execl("ay", "bee", NULL), "execl");

但我认为这不是一个好方法。对此有什么好的解决方案?

4

1 回答 1

0

到目前为止,这个问题的最佳解决方案是在这里偶然遇到的:http: //c.learncodethehardway.org/book/learn-c-the-hard-waych21.html#x26-10500021

我认为其他答案中建议的每个函数的宏要干净得多。也许有人有更好的解决方案,但现在这是我将使用的。

于 2012-04-29T20:30:20.187 回答