lkml.org 
[lkml]   [2006]   [Mar]   [26]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
FromKyle Moffett <>
SubjectRe: Parenthesize macros in xfs
DateSun, 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/

\
 
 \ /
  Last update: 2006-03-26 14:33    [from the cache]
©2003-2008