Является ли код возврата "! ERROR" нормальным в C? - PullRequest
1 голос
/ 27 апреля 2019

Я просматриваю некоторый устаревший исходный код C, и автор определил некоторые перечисления кодов ошибок, которые включают ERROR (-1) и SUCCESS (0). Однако во всем коде они использовали соглашение !ERROR в качестве кода возврата из функции.

Предположительно, это должно относиться к УСПЕХУ (0).

Кто-нибудь видел это раньше? Имеет ли это для вас смысл?

1 Ответ

4 голосов
/ 27 апреля 2019

Использование нуля для обозначения успеха и отрицательного значения, часто -1, для обозначения неудачи - очень распространенное соглашение. Системные вызовы Unix широко используют это (иногда с неотрицательным числом, означающим успех, когда, например, возвращается дескриптор файла).

Определенно существуют и другие соглашения - OpenSSL использует другое соглашение, например: 0 означает сбой, а 1 означает успех. Это имеет то преимущество, что вы можете написать:

if (OpenSSL_API_Function(arg1, arg2, &arg3))
{
    …continue on success;
}

Использование !ERROR вместо 0 или SUCCESS или OK менее обычно. Это, конечно, не так, поскольку логическое отрицание любого ненулевого значения равно нулю. Авторы, по-видимому, считают «!ERROR» похожим на написание «без ошибок» и считают, что это яснее, чем SUCCESS или OK. Как правило, избегайте отрицаний только ради удовольствия; это может привести к запутанному мышлению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...