On Thu, Sep 24, 2015 at 06:55:11PM +0200, Bernd Schmidt wrote:
> On 09/24/2015 06:11 PM, Steve Ellcey wrote:
> >At least one of the warnings in glibc is not justified (in my opinion).
> >The header file timezone/private.h defines time_t_min and time_t_max.
> >These are not used in any of the timezone files built by glibc but if
> >you look at the complete tz package they are used when building other
> >objects that are not part of the glibc tz component and that include
> >private.h.
> 
> The standard C way of writing this would be to declare time_t_min in the
> header and have its definition in another file, or use a TIME_T_MIN macro as
> glibc does in mktime.c. That file even has a local redefinition:
>       time_t time_t_min = TIME_T_MIN;
> So at the very least the warning points at code that has some oddities.

I can believe its an odd way to write C, but is it actually a bad one?
I expect if I got warnings for code like that I'd be pretty unhappy
about either moving the constant out where the compiler can't always see
it, or making it a macro.

> >I would make two arguments about why I don't think we should warn.
> >
> >One is that 'static int const foo = 1' seems a lot like '#define foo 1'
> >and we don't complain about the macro foo not being used.  If we
> >complain about the unused const, why not complain about the unused
> >macro?  We don't complain because we know it would result in too many
> >warnings in existing code.  If we want people to move away from macros,
> >and I think we do, then we should not make it harder to do so by
> >introducing new warnings when they change.
> >
> >The other is that C++ does not complain about this.  I know that C and
> >C++ are different languages with different rules but it seems like this
> >difference is a difference that doesn't have to exist.  Either both
> >should complain or neither should complain.  I can't think of any valid
> >reason for one to complain and the other not to.
> 
> Well, they _are_ different languages, and handling of const is one place
> where they differ. For example, C++ consts can be used in places where
> constant expressions are required. The following is a valid C++ program but
> not a C program:
> 
> const int v = 200;
> int t[v];
> 
> The result is that the typical programming style for C is to have constants
> #defined, while for C++ you can find more examples like the above; I recall
> Stroustrup explicitly advocating that in the introductory books I read 20
> years ago, and using it as a selling point for C++. Existing practice is
> important when deciding what to warn about, and for the moment I remain
> convinced that C practice is sufficiently different from C++.

existing practice is certainly important, but I would say that what is
good practice is also very important.  It seems to me that warning for
these constants is basically making it hard to follow a better practice
than the existing one.  That seems pretty unfortunate.

On the other hand I've become much more of a C++ programmer than a C one
so, I'm probably not the best judge.

Trev

> 
> 
> Bernd

Reply via email to