On 11/29/11 13:32, Eric Blake wrote:
>> #if FEATURE_ENABLED
>> > #define FEATURE_FORMAT "feature"
>> > #else
>> > #define FEATURE_FORMAT ""
>> > #endif
>> > ...
>> > printf (buf, FEATURE_FORMAT);
> I assume you meant sprintf (buf, FEATURE_FORMAT), or printf
> (FEATURE_FORMAT)?
Yes, that's right.
Since my earlier example wasn't convincing enough, how
about this one?
#if FEATURE_ENABLED
#define FEATURE_FORMAT_ARGS(a, b) "(%d, %s)" a, b
#else
#define FEATURE_FORMAT_ARGS(a, b) ""
#endif
...
printf (FEATURE_FORMAT_ARGS (i, argv[i]);
...
snprintf (buf, sizeof buf, FEATURE_FORMAT_ARGS (i, argv[i]);
I wouldn't mind so much if I thought that -Wformat-zero-length
would be useful, but I can't think of a single likely
use case for it. It's not like there's a real problem with
people writing 'printf ("");' when they should write nothing.