On Fri, Jul 26, 2013 at 06:36:21AM +0200, Kagamin wrote:
> On Tuesday, 23 July 2013 at 18:14:10 UTC, Ali Çehreli wrote:
> >First of all, C does not have exceptions so every single thing
> >must be done as two lines:
> >
> >    err = do_something();
> >    goto_finally_if_error(err);
> 
> Huh, never seen such pattern in C. I just return error code.

I think what he meant is code like this:

        #define OK 0
        #define ERR -1

        void myfunc(int x, int y, int z) {
                void *buf = malloc(100);
                int err;

                if ((err = fun1(x,y,z)) != OK)
                        goto EXIT;

                if ((err = fun2(x,y,z)) != OK)
                        goto EXIT;

                if ((err = fun3(x,y,z)) != OK)
                        goto EXIT;

                if ((err = fun4(x,y,z)) != OK)
                        goto EXIT;

                /* Finally finished! */
                err = OK;

        EXIT:
                /* Do cleanup */
                free(buf);

                return err;
        }

I have to write code like this every day at work, and it's a royal pain
in the neck.


T

-- 
The best way to destroy a cause is to defend it poorly.

Reply via email to