Re: 2.4.9 does not compile [PATCH]

Andrew Morton
2001-08-17T01:56:06Z

Anton Altaparmakov wrote:
>
> #define min(x,y) \
> ({ typeof(x) __x = (x); typeof(y) __y = (y); __x < __y ? __x : __y; })
>
> int test(int a, int b, int c)
> {
> return min(a, min(b, c));
> }

Problems occur if the caller happens to pass in variables whose
names confilct with the ones you chose in the above macro:

laptop:/home/akpm> cat t.c
#define min(x,y) \
({ typeof(x) __x = (x); typeof(y) __y = (y); __x < __y ? __x : __y; })

int test(int __x, int __y)
{
return min(__x, __y); /* sic */
}

main()
{
printf("%d\n", test(1, 2));
printf("%d\n", test(2, 1));
}
laptop:/home/akpm> gcc t.c
laptop:/home/akpm> ./a.out
-1073744344
1074305684

So if you replace "__x" with "__dont_use_this_identifier_its_reserved_for_min"
I don't expect anyone could sensibly complain...

-