learning dragonfly or C...
Matthew Dillon
dillon at apollo.backplane.com
Thu Nov 11 14:05:36 PST 2004
:
:> This brings up an interesting ancillary issue in that you might also
:> see a very experienced C programmer use a slightly different sort
:> of construction, like this:
:>
:> struct vnode *vp;
:> struct vnode *nvp;
:>
:> if ((error = ckpt_fhtovp(&vnh->vnh_fh, &nvp)) != 0)
:> return error;
:> vp = nvp;
:> /* nvp ignored, vp used from here on */
:>
:> Care to take a guess at why advanced C programmers use this construction
:> instead of simply passing &vp ?
:>
:> -Matt
:
:well not knowing what vnh_fh or ckpt_fhtovp is, sets me back a bit, but
:I'll guess:
:
:...need more info...
:http://fxr.watson.org/fxr/source/sys/ckpt.h?v=DFBSD
:
:is it a buffer to throw out illegal file handles inherited by NFS?
:
:// George
Nope. Ignore the actual function names and ignore the function of
the code, its irrelevant. Just focus on the question: Why is
&nvp being passed to a function and then vp assigned to nvp when
one could simply pass &vp to the function and get rid of nvp entirely?
Let me modify the example a little:
struct fubar *blah;
struct fubar *nblah;
getmafubar(&nblah);
blah = nblah;
blech = blah->this + blah->that - somefunction(blah);
and_other_random_things_using(blah);
blah blah blah...
Ok, so, the question is, why would an advanced C programmer every
want to create a separate variable to pass the address to a function
and then simply assign the result back to the first variable and never
use the second variable again?
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
More information about the Kernel
mailing list