On Dec 10, 2012, at 12:50 PM, David Holland wrote: > On Mon, Dec 10, 2012 at 09:36:35AM -0600, David Young wrote: > ... > (Also, as a side issue, at least one of your examples is invalid. > >> 1 Lazy evaluation: unlike a function call's arguments, a macro's >> arguments are not evaluated before the macro is "called." E.g., in >> the code below, the second and following arguments of M(a, b, c, d, e) >> are not evaluated unless p(a) is true: >> >> #define M(__x, ...) \ >> do { \ >> if (p(__x)) \ >> f(__x, __VA_ARGS__); \ >> } while (false) >> >> M(a, b, c, d, e); > > The C standard makes no such guarantee.)
Really? if (false) foo (bar()); might evaluate bar() ? Where does it say that? paul