On Mon, Feb 9, 2009 at 3:17 PM, Steve Sisak <sgs-li...@codewell.com> wrote: > At 12:52 PM -0800 2/9/09, Clark Cox wrote: >> >> On Mon, Feb 9, 2009 at 12:10 PM, Sean McBride <s...@rogue-research.com> >> wrote: >> > On 2/9/09 11:24 AM, Clark Cox said: >> >>That is, the preprocessor treats any undefined identifier in an '#if' >>>> >>>> or '#elif" as if it were defined to be zero. >>> >> > I'm not a language lawyer, but I believe the latter is not guaranteed >> to >>> >>> evaluate to 0 if the macro is not defined. However, I imagine 99% of >>> compilers will evaluate it to 0. gcc certainly does. >> >> I am 100% positive that this is guaranteed by the standard: >> >>> From 6.10.1.3: >> >> "After all replacements due to macro expansion and the defined unary >> operator have been performed, all remaining identifiers are replaced >> with the pp-number 0" > > Just to be pedantic, which standard? > > You are definitely describing the behavior of the C++ preprocessor. > > IIRC, in ANSI C, #if of an undefined symbol is an error, and I'm not sure > about C99.
It was the C99 standard that I was quoting above. The equivalent passage from the C89/C90 standard: "After all replacements are finished, the resulting preprocessing tokens are converted into tokens, and then all remaining identifiers are replaced with 0" and the equivalent passage from the C++ standard: "After all replacements due to macro expansion and thedefinedunary operator have been performed, all remaining identifiers and keywords, except for true and false, are replaced with the pp-number 0" > So, I belive #if defined(x) && (x) is good defensive programming. Nope, it's still redundant. And I am 100% sure of that. -- Clark S. Cox III clarkc...@gmail.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com