Messages in this thread | | | Date | Thu, 16 Aug 2001 18:49:58 -0700 | From | Andrew Morton <> | Subject | Re: 2.4.9 does not compile [PATCH] |
| |
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/
| |