On Mon, Dec 05, 2005 at 06:28:00PM -0500, Chris Shoemaker wrote: > You misunderstand me. This *is* a problem, and we *should* fix it. > Our code is just *wrong*. It's wrong on 32-bit machines and on 64-bit > machines. (Although it happens to be a benign bug anywhere ((char *) > NULL) is a 32-bit zero, which is almost everywhere.) It's just wrong > C. '0' is only equivalent to the typed null pointer in a pointer > context (that's even true when a typed null pointer is not a 32-bit > null; it's part of the language definition of a null pointer.) An ^^^^^ err, that should be "zero". I can't seem to find a online copy of the ANSI C standard but google turned up several portability guides that make this same point. Here's one: http://www.psgd.org/paul/docs/cport/cport11.htm
Notice that constant zero is not always equal to a value of zero. -chris > argument list to a variadic function is no different than a function > with no prototype - the arguments are NOT in pointer context. > > The C-language rule is "always cast NULL when used as a sentinel to a > variadic function, otherwise you're accidentally passing integer > zero, which is wrong." > > -chris > _______________________________________________ > gnucash-devel mailing list > gnucash-devel@gnucash.org > https://lists.gnucash.org/mailman/listinfo/gnucash-devel _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel