mex-функции - это обычные функции C, поэтому, чтобы выйти из функции раньше, просто используйте return
.
Если вы используете выделенные ресурсы, которые необходимо очистить вручную, установленная идиома в C заключается в использовании goto cleanup;
(это одно из немногих, если не единственное, приемлемое и общепринятое использование goto
):
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]
) {
for (int i = 0; i <= 5; i++) {
if (mxIsInf(out[i])) {
char *err_msg = malloc(max_len_err_msg);
snprintf(err_msg, max_len_err_msg, "Inf detected in file %s at line %d", __FILE__, __LINE__);
mexWarnMsgTxt(err_msg);
free(err_msg);
goto cleanup;
} else if (mxIsNaN(out[i])) {
char *err_msg = malloc(max_len_err_msg);
snprintf(err_msg, max_len_err_msg, "NaN detected in file %s at line %d", __FILE__, __LINE__);
mexWarnMsgTxt(err_msg);
free(err_msg);
goto cleanup;
}
…
}
cleanup:
// Perform cleanup here.
}
(Обратите внимание, что в этом коде очистка err_msg
выполняется в своей собственной области, а не с глобальной очисткой.)
Но в случае, когда очистка не должна выполняться, операторы goto
не нужны и могут быть заменены на return
.