Dear All, 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? Regards, Mukund Jampala -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/