[lkml]   [2001]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [IDEA+RFC] Possible solution for min()/max() war
    >>#define min2(a,b) ({ \
    >> typeof(a) __a = (a); \
    >> typeof(b) __b = (b); \
    >> if( sizeof(a) != sizeof(b) ) BUG(); \
    >> if( ~(typeof(a))0 > 0 && ~(typeof(b))0 < 0) BUG(); \
    >> if( ~(typeof(a))0 < 0 && ~(typeof(b))0 > 0) BUG(); \
    >> (__a < __b) ? __a : __b; \
    >> })
    >>#define min3(type,a,b) ({ \
    >> type __a = (a); \
    >> type __b = (b); \
    >> if( sizeof(a) > sizeof(type) ) BUG(); \
    >> if( sizeof(b) > sizeof(type) ) BUG(); \
    >> (__a < __b) ? __a : __b; \
    >> })

    RH> DesJardin's argument is finely crafted, but does this support it? Is min3
    RH> intended to be what Linus was talking about?

    My min2 requires types to be the same size and sign (after char/short->int
    promotion - C always does that, seems we cannot control it - run
    my test program and you'll see). If type is changed elsewhere later, min2
    will barf - and this is good for preventing hard to track bugs.

    Min3 is more permissive but requires programmer to indicate type
    explicitly. However, it will bite you when you try convert long to
    int, so it will catch some bugs too when someone decide to change
    type of the variable.

    Can you make better min? Another min addressing different type of bug?
    It could be interesting. (We have similar issues with "less than" and
    the like ops)

    Don't know what Linus originally intended. I thought my two cents
    might be useful.

    RH> isn't what Linus was saying simply something like...

    RH> #define min(type,a,b) (type) a < (type) b ? (type) a : (type) b;

    Looks too dangerous to me. Double evaluation of a and b, no ()
    around them...

    RH> Looking at the trade-offs should account for the simplicity.

    Ifs inside my min2 and min3 optimize out to nothing. Checked that.
    Best regards,

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 13:17    [W:0.032 / U:6.340 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site