On Fri, 2006-02-17 at 19:01 +0530, Mukund JB. wrote: [...] > I have seen a macro like this in the Linux kernel sources in > include/linux/usb.h line no: 1090. > > #define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) > > I did not understand how it works? > I have written a small usermode program to test this. > > #define x 1 > #define y 2 > #define macro() (x = y) > main() > { > int abc = macro(); > printf("abc = %d\n",abc); > } > > This code results in a compile error. > test.c:9: error: invalid lvalue in assignment. > > Why? Find the option to tell gcc to stop after preprocessing, use it, look at the resulting file (you can specify it with -o) and you will see it pretty clearly. Bernd -- Firmix Software GmbH http://www.firmix.at/ mobil: +43 664 4416156 fax: +43 1 7890849-55 Embedded Linux Development and Services -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/