lkml.org 
[lkml]   [2005]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: typedefs and structs
    Date
    On Tuesday 08 November 2005 19:59, Douglas McNaught wrote:
    > linas <linas@austin.ibm.com> writes:
    >
    > > On Tue, Nov 08, 2005 at 07:37:20PM -0500, Douglas McNaught was heard to remark:
    > >>
    > >> Yeah, but if you're trying to read that code, you have to go look up
    > >> the declaration to figure out whether it might affect 'foo' or not.
    > >> And if you get it wrong, you get silent data corruption.
    > >
    > > No, that is not what "pass by reference" means. You are thinking of
    > > "const", maybe, or "pass by value"; this is neither. The arg is not
    > > declared const, the subroutine can (and usually will) modify the contents
    > > of the structure, and so the caller will be holding a modified structure
    > > when the callee returns (just like it would if a pointer was passed).
    >
    > Right. My point is only that it's not clear from looking at the call
    > site whether a struct passed by reference will be modified by the
    > callee (some people pass by reference just for "efficiency"). And if
    > the called function modifies the data without the caller's knowledge,
    > it leads to obscure bugs. Whereas if you pass a pointer, it's
    > immediately clear that the called function can modify the pointed-to
    > object.
    >

    A structure is almost never passed by value, no matter whether it is C
    or C++. So both languages require you either use descriptive naming or
    look up declaration/implementation:

    C:
    struct str {
    char buf[1024];
    int count;
    };
    struct str s;

    do_something_with_s(&s);
    do_something_else_with_s(&s);

    Which one modufies s?

    --
    Dmitry
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-11-09 03:17    [W:0.026 / U:30.372 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site