Bardzo często widzę w kodzie C negację zwracanych kodów błędów, np. return -EINVALZamiast return EINVAL. Dlaczego używał negacji?
Bardzo często widzę w kodzie C negację zwracanych kodów błędów, np. return -EINVALZamiast return EINVAL. Dlaczego używał negacji?
Odpowiedzi:
W wielu systemach UNIXen konwencja dla wywołań systemowych polega na tym, że zwracają kod błędu zanegowany w przypadku błędu, a rzeczywistą wartość w przypadku sukcesu.
To jest tłumaczone po stronie użytkownika -1na błędy z dodatnim kodem błędu w errnolub rzeczywistą wartością w przypadku sukcesu.
Konieczność podwójnego celowania wartości zwracanej wynika z tego, że wielokrotne zwroty w tego rodzaju języku są uciążliwe, ponieważ trzeba będzie uciekać się do przekazania parametrów wyjściowych, aby zatrzymać ewentualny błąd.