Bardzo często widzę w kodzie C negację zwracanych kodów błędów, np. return -EINVAL
Zamiast return EINVAL
. Dlaczego używał negacji?
12
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 -1
na błędy z dodatnim kodem błędu w errno
lub 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.
To konwencja; wiele funkcji zwraca bardzo pozytywny wynik w przypadku sukcesu, a ujemny w przypadku niepowodzenia. Początkowo był związany z kodem powrotu procesu uniksowego. Sukces został wskazany przez 0.