Почему некоторые системные вызовы POSIX возвращают целое число вместо логического? - PullRequest
0 голосов
/ 13 декабря 2018

В самой последней версии спецификации POSIX.1-2017 некоторые системные вызовы, например link()/unlink(), access() или chmod(), возвращают либо 0 (успешно), либо -1 (неудачно).

В этом случае не было бы более семантически правильным вернуть логическое значение ?

И если бы я изменил тип возврата с int на boolean, все еще POSIX-совместимый ?

1 Ответ

0 голосов
/ 17 декабря 2018

Я думаю, что было сделано, чтобы подобный тип возврата был среди всех функций, возвращающих целочисленное значение.В противном случае программист должен каждый раз проверять, возвращает ли эта функция int или boolean.

Первоначально bool даже не был типом в C: я не знаю, что это был также выбордля ретро-совместимости.

В некоторых случаях у вас нет даже выбора: возьмите в качестве примера следующее:

int fflush(FILE *fp) Возвращает: 0, если все в порядке, EOF при ошибке

int fclose(FILE *fp); Возвращает: 0, если в порядке, EOF при ошибке

int atexit(void (*func)(void)) Возвращает: 0, если в порядке, ненулевое значение при ошибке

EOF - макрособычно определяется как -1, но это не гарантируется.В некоторых других случаях вы хотите указать ошибку

...