Messages in this thread | | | From | Kyle Moffett <> | Subject | Re: Parenthesize macros in xfs | Date | Sun, 26 Mar 2006 07:30:24 -0500 |
| |
On Mar 26, 2006, at 07:19:14, Måns Rullgård wrote: > A double semicolon can cause all sorts of hard to debug problems. > Consider this: > > #define foo() bar(); > /* ... */ > if(x) > foo(); > else > baz(); > > This will expand to syntactically invalid code because of the extra > semicolon.
More generically, the code "do { [...] } while(0)" can _always_ be substituted for the code "function_returning_void()" without changing the meaning of the surrounding code. Look at the following examples:
for (i = 0; i < 10; i++) { macro(); }
for (i = 0; i < 10; i++) if (i > 5) macro1(); else macro2();
Cheers, Kyle Moffett
- 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/
| |