LINUX.ORG.RU

История изменений

Исправление shkolnick-kun, (текущая версия) :

Помоему, конструкция вида:

char* read_kode(const char *arg){
    FILE * f;

    f = fopen(arg, "r");

    if (NULL != f){
        if (fseek(f, 0, SEEK_END)){
            ssize_t fsz;

            fsz = ftell(f);
            rewind(f);

            ret = malloc(fsz+1);
            if (NULL != ret){
                char * ret;
                ssize_t rsz;

                rsz = fread(f, ret, fsz);

                if (0 == fsz - rsz){
                    fclose(f);
                    ret[fsz] = 0;
                    return ret;    
                }else{
                    free(ret);
                }
            }
        }
        fclose(f);    
    }
    return NULL;    
}
довольно сильно похожа на:
if () {
    if () {
        do {
            if () {
                if () {
                    if () {
                        ...
                    }
                }
                ...
            }
            ...
        }
        while ();
        ...
    }
    else {
        ...
    }
}

И это не пример, а описание распространенного приема рефакторинга, когда:

У вас есть группа вложенных условных операторов, среди которых сложно выделить нормальный ход выполнения кода.

Если ОП/ТС будет увлекаться вложенностью, то рано или поздно он таки создаст вышеописанную проблему.

Так что пусть привыкает к goto error_xxx; или переходит на C++ с исключениями.

Исходная версия shkolnick-kun, :

Помоему,конструкция вида:

char* read_kode(const char *arg){
    FILE * f;

    f = fopen(arg, "r");

    if (NULL != f){
        if (fseek(f, 0, SEEK_END)){
            ssize_t fsz;

            fsz = ftell(f);
            rewind(f);

            ret = malloc(fsz+1);
            if (NULL != ret){
                char * ret;
                ssize_t rsz;

                rsz = fread(f, ret, fsz);

                if (0 == fsz - rsz){
                    fclose(f);
                    ret[fsz] = 0;
                    return ret;    
                }else{
                    free(ret);
                }
            }
        }
        fclose(f);    
    }
    return NULL;    
}
довольно сильно похожа на:
if () {
    if () {
        do {
            if () {
                if () {
                    if () {
                        ...
                    }
                }
                ...
            }
            ...
        }
        while ();
        ...
    }
    else {
        ...
    }
}

И это не пример, а описание распространенного приема рефакторинга, когда:

У вас есть группа вложенных условных операторов, среди которых сложно выделить нормальный ход выполнения кода.

Если ОП/ТС будет увлекаться вложенностью, то рано или поздно он таки создаст вышеописанную проблему.

Так что пусть привыкает к goto error_xxx; или переходит на C++ с исключениями.