Hirdetés

Új hozzászólás Aktív témák

  • pmonitor
    aktív tag

    [centralized-exiting-of-functions]

    vagy

    int __init my_init_function(void) { 
    int err; 
    /* registration takes a pointer and a name */ err = register_this(ptr1, "skull");
    if (err) goto fail_this;
    err = register_that(ptr2, "skull"); 
    if (err) goto fail_that;
    err = register_those(ptr3, "skull"); if (err) goto fail_those; 
      return 0; /* success */
    fail_those: unregister_that(ptr2, "skull");
    fail_that: unregister_this(ptr1, "skull");
    fail_this: return err; /* propagate the error */
    }

    [link]

    amikor nem tudtad másképp megoldani?

    Jaj, az annyira olyan ez a kérdés. Lehet programozni if-else nélkül is. Lehet programozni for, while, do-while nélkül is, de nyilvánvalóan nem érdemes.

    Ezt kalkuláltam ki:

    int __init my_init_function(void) {
    int err = register_this(ptr1, "skull");
    if (!err)
    {
    err = register_that(ptr2, "skull");
    if(!err)
    {
    err = register_those(ptr3, "skull");
    if (err)
    {
    unregister_that(ptr2, "skull");
    unregister_this(ptr1, "skull");
    }
    } else {
    unregister_this(ptr1, "skull");
    }
    }
    return err;
    }

    Lehet, hogy még nem teljesen ekvivalens, de a logika látszik benne.

Új hozzászólás Aktív témák