lkml.org 
[lkml]   [2001]   [Aug]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [IDEA+RFC] Possible solution for min()/max() war
On 28 Aug 2001, Andreas Schwab wrote:

> Roman Zippel <zippel@linux-m68k.org> writes:
>
> |> Hi,
> |>
> |> Linus Torvalds wrote:
> [...]
> |> > You just fixed the "re-use arguments" bug - which is a bug, but doesn't
> |> > address the fact that most of the min/max bugs are due to the programmer
> |> > _indending_ a unsigned compare because he didn't even think about the
> |> > type.


#if 0
If the comparison was made unsigned, cast to the largest natural
value on the target, while keeping the types and sizes of the
input variables the same, this macro does about what 99.9999999 percent
of what everybody wants:
#endif

#include <stdio.h>

#define min(a,b) ((size_t)(a) < (size_t)(b) ? (a) : (b))

int main()
{
printf("%d\n", min(1,2));
printf("%d\n", min(-1,2));
printf("%d\n", min(0xffffffff,3));
printf("%d\n", min(0x8000,4));
printf("%d\n", min(0x7fff,5));
printf("%d\n", min(0x80000000,6));
printf("%d\n", min(0x7fffffff,7));

printf("%ld\n", min(1L,2L));
printf("%ld\n", min(-1L,2L));
printf("%ld\n", min(0xffffffff,3L));
printf("%ld\n", min(0x8000,4L));
printf("%ld\n", min(0x7fff,5L));
printf("%ld\n", min(0x80000000,6L));
printf("%ld\n", min(0x7fffffff,7L));

printf("%lu\n", min(1L,2LU));
printf("%lu\n", min(-1L,2LU));
printf("%lu\n", min(0xffffffff,3LU));
printf("%lu\n", min(0x8000,4LU));
printf("%lu\n", min(0x7fff,5LU));
printf("%lu\n", min(0x80000000,6LU));
printf("%lu\n", min(0x7fffffff,7LU));

printf("%d\n", min(-1, -2));
printf("%d\n", min(-1, 0));
printf("%p\n", min((void *)0x80000000, (void *)0x7fffffff));
return 0;
}



Cheers,
Dick Johnson

Penguin : Linux version 2.4.1 on an i686 machine (799.53 BogoMips).

I was going to compile a list of innovations that could be
attributed to Microsoft. Once I realized that Ctrl-Alt-Del
was handled in the BIOS, I found that there aren't any.


-
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-03-22 12:58    [W:0.232 / U:0.104 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site