This is the mail archive of the mailing list for the glibc project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch] Fix ONE_DIRECTION undef warnings.

On 04/30/2014 02:10 PM, Roland McGrath wrote:
>> As Steve suggested in another email it might make sense to have a single
>> header define "macro API" defaults, that make sense for 99% of the
>> configurations. It would make it easy to adjust them en-masse instead of
>> rafactoring the changes across the 54 source files that use it.
> The obvious way to do this makes all those source files places where typos
> could go unnoticed.  We should think hard about ways to reduce that danger.
> IMHO this is a stronger motivator than avoiding duplicate changes that can
> be easily mechanized.  The former leads to silent bugs gone unnoticed,
> which is a risk of real user harm that might not be noticed until much
> later.  The latter leads to build errors/warnings that alert one early to
> the need to do the annoying mechanically-duplicative change, which is a
> certainty of immediate slight maintainer annoyance that happens immediately
> to the maintainer who instigated the change.

That sounds like you're against the default header design. Could you clarify
your position on that?

My thoughts on the matter are:

(a) The default header defines defaults e.g.

#define FOO 0

(b) The uses include it early.

#include <foo-defaults.h>

(c) Uses that need to override defaults do so like this.

#undef FOO
#define FOO 1

(d) All uses of FOO remain safe.

#if FOO

Common mistakes:

(1) Include is late.

#undef FOO
#define FOO 1
#include <foo-defaults.h>

Multiple definition error. Developer has to fix it immediately.

(2) Wrong default.

Can't be fixed.

If you specify the wrong value that's logical error we can't correct.

(3) Complicates include order.

It does.

In that it must be:

#include <foo-defaults.h>
#include <includes-and-overrides-foo-defaults.h>

Or it doesn't work and we have the similar includes problem as defined here:

If you aren't against default headers, is your statement to serve as a reminder
that the build should fail early and immediately and such implementations should
be chosen over those that done? I agree.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]