Re: 2.4.9 does not compile [PATCH]

Andrew Morton (akpm@zip.com.au)
Thu, 16 Aug 2001 18:49:58 -0700


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...

-
-
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/