|
Message-ID: <20131106163640.GN24286@brightrain.aerifal.cx> Date: Wed, 6 Nov 2013 11:36:40 -0500 From: Rich Felker <dalias@...ifal.cx> To: musl@...ts.openwall.com Subject: Re: [PATCH v2] shadow: Implement putspent On Wed, Nov 06, 2013 at 02:20:54PM +0100, Jens Gustedt wrote: > Hi Rich, > > Am Dienstag, den 05.11.2013, 18:31 -0500 schrieb Rich Felker: > > While it doesn't really matter in this file, in general, macro > > arguments should be properly parenthesized, as in: > > > +#define NUM(n) ((n) == -1 ? 0 : -1), ((n) == -1 ? 0 : (n)) > > for such a macro that is replacing two function arguments, I'd go for > a much more descriptive name, something like NUM2ARGS I agree with you in principle, but I don't think it really matters here. The file is small enough that you see both the definition and usage together. A better improvement might be adding a comment that the macro expands to two arguments to fprintf, a precision and a value, but we're getting well into bikeshed territory here. :-) > > +#define STR(s) ((s) ? (s) : "") > > in the context of the actual function that would certainly overkill, > but generally it is not a good idea to mix user strings and string > literals without consting them. So in a general context I'd go for > something like > > #define STR(S) ((char const*)((S) ? (S) : "")) > > or even > > #define STR(S) ((S) ? (char const*){ (S) } : "") > > to have a better type check for the argument I disagree with this change. The type of string literals is char *, not const char *, so it's not a type consistency issue. Even if it were, the ?: operator handles the type correctly anyway. My view is that casts are a code smell, and no-op casts are harmful in that they obfuscate the correctness of types (since the reader has to question whether the cast is hiding a type mismatch). Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.