Я недавно придумал, как мне кажется, странный способ объявления статуса возврата функции в c-коде.Функция, выполняющая задачу, часто возвращает код состояния в зависимости от успеха или ошибки.Это часто отправляется как целое число или перечисление, объявленное где-то еще в файле (или другом файле).Я обнаружил, что, объявив enum в сигнатуре функции, мы можем:
- иметь возможные возвращаемые значения, близкие к сигнатуре функции
- иметь уникальный набор возвращаемых значений для каждой функции,избегая неиспользуемых значений
Например, вот так:
// implementation.h
enum {
OK,
INTERNAL_ERROR,
NO_PARAMETERS
} do_that();
// implementation.c
enum {
OK,
INTERNAL_ERROR,
NO_PARAMETERS
} do_that() {
if (this())
return OK;
else if (that())
return NO_PARAMETERS;
return INTERNAL_ERROR;
}
Я никогда не видел, чтобы кто-нибудь использовал этот стиль;это действительно?Если нет, то почему бы и нет?
Один недостаток, который я вижу, заключается в том, что вы должны указать возможные возвращаемые значения как в c-файле, так и в заголовочном файле, но это также делает его более доступным и понятным непосредственно, когда вы смотрите наподпись.
Другая проблема заключается в том, что, насколько я понимаю, неявное преобразование между enum-типами разрешено даже в педантичном c, это означает, что объявление различных возвращаемых состояний в объявлении и реализации функции (файл c и h) не будет генерироватьпредупреждение или ошибка.