lkml.org 
[lkml]   [2006]   [Mar]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: Parenthesize macros in xfs
Date
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    [W:0.043 / U:0.056 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site