У меня есть следующая функция:
enum MqErrorE ReadI(struct MqS* ctx, int *i);
Функция сохраняет результат в i
и возвращает флаг OK
или ERROR
.
Если функция возвращает ERROR
, я хочу перейти к метке с именем error
.
int i;
if (ReadI(ctx,&i) == ERROR)
goto error;
// ...
error:
// do some error processing
Чтобы сделать код более «удобным», я хотел бы сделать что-то вроде:
int i;
i = ReadI_something(ctx); // on error jump to "label"
// ...
error:
//...
Другими словами, мне нужно ReadI_something
, чтобы вернуть значение, но также чтобы иметь возможность перейти к метке.
В качестве ограничения я хочу избегать использования longjmp
/ setjmp
.
Как мне написать макрос или функцию для этого?