From: Mark Wooding Date: Mon, 19 Feb 2007 10:04:12 GMT Subject: Re: Numeric constants as strings Message-ID: In-Reply-To: <200702190916.35813.andyparkins@gmail.com> Andy Parkins wrote: > I'm working on bringing my hash width literals patch up to date now > that 1.5.0 has passed. It's all been trivial apart from one line: > > #define HASH_WIDTH_ASCII 40 > - printf("%-40s %s%s (%d subtrees)\n", > + printf("%-" HASH_WIDTH_ASCII "s %s%s (%d subtrees)\n", The standard two-step goes #define STRINGIFY(foo) STRINGIFY_REALLY(foo) #define STRINGIFY_REALLY(foo) #foo The purpose of STRINGIFY_REALLY is to macro-expand the argument foo. If you just invoked STRINGIFY_REALLY printf("%-" STRINGIFY_REALLY(HASH_WIDTH_ASCII) "s %s%s (%d subtrees)\n", you'd get printf("%-HASH_WIDTH_ASCIIs %s%s (%d subtrees)\n", ... which is not what you wanted. However, printf("%-" STRINGIFY(HASH_WIDTH_ASCII) "s %s%s (%d subtrees)\n", will do the right thing. -- [mdw]