The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Разработчики OpenBSD представили криптографическую библиотек..."
Отправлено Vitto74, 04-Июн-18 00:53 
Плотно всеже засело правило - не использовать goto. Хотя смысл правила в том, чтобы этот самый goto не использовать там, где это может запутать код. Специально посмотрел исходник - никакой запутанности: goto используется только для упрощения кода. Например - что проще, такой код без goto

static int
csi_err_vset(struct csi_err *err, u_int code, int errnum, const char *fmt, va_list ap)
{
    char *errmsg = NULL;
    int rv = -1;
    bool isError = false;

    csi_err_clear(err);

    err->code = code;
    err->errnum = errnum;

    if (vasprintf(&errmsg, fmt, ap) == -1) {
        errmsg = NULL;
        isError = true;
    }

    if ((errnum == -1) and (!isError)) {
        err->msg = errmsg;
        return (0);
    }

    if ((asprintf(&err->msg, "%s: %s", errmsg, strerror(errnum)) == -1) and (!isError)) {
        err->msg = NULL;
        isError = true;
    }
    if (!isError){
        rv = 0;
    }

    free(errmsg);

    return (rv);
}

или то, что мы видим в проекте?

static int
csi_err_vset(struct csi_err *err, u_int code, int errnum, const char *fmt, va_list ap)
{
    char *errmsg = NULL;
    int rv = -1;

    csi_err_clear(err);

    err->code = code;
    err->errnum = errnum;

    if (vasprintf(&errmsg, fmt, ap) == -1) {
        errmsg = NULL;
        goto err;
    }

    if (errnum == -1) {
        err->msg = errmsg;
        return (0);
    }

    if (asprintf(&err->msg, "%s: %s", errmsg, strerror(errnum)) == -1) {
        err->msg = NULL;
        goto err;
    }
    rv = 0;

err:
    free(errmsg);

    return (rv);
}

В libcsi код с goto явно менее запутан, чем получился бы без него. Поэтому говорить фу, на всё без исключения goto, есть крайность как и его необдуманное использование, а крайности как известно - плохо.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру