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 に答える