[TUHS] v7 K&R C

Paul Winalski paul.winalski at gmail.com
Tue May 12 04:25:15 AEST 2020


On 5/11/20, Greg A. Woods <woods at robohack.ca> wrote:
>
> The lameness of typedef (and in how enum is related to typedef) is one
> of the saddest parts of C.  (The other is the default promotion to int.)

I would add a third:  file-scope declarations being global by default.
One must use the keyword "static" to restrict a file-scope declaration
to the file it's declared in.  And why "static"?  All file-scope
declarations have static allocation.  Why isn't the keyword "local" or
"own"?  Anyway, the way it ought to be is that file-scope declarations
are restricted to the file they're declared in.  To make the symbol
visible outside its file, you should have to explicitly say "global".

> It would be trivial to fix too -- for a "new" C, that is.  Making it
> backward compatible for legacy code would be tough, even with tooling to
> help fix the worst issues.  I've seen far too much code that would be
> hard to fix by hand, e.g. some that even goes so far as to assume things
> like arithmetic on enum values will produce other valid enum values.

This ought to be easy to fix using a compiler command line option for
the legacy behavior.  Many C compilers do this already to support K&R
semantics vs. standard C semantics.

> Ideally enums could be a value in any native type, including float/double.

Except pointers, of course.

>> IMHO, without your semantics, enums are pretty useless, #define is good
>> enough and more clear.
>
> Actually that's no longer true with a good modern toolchain, especially
> with respect to the debugger.  A good debugger can now show the enum
> symbol for a (matching) value of a properly typedefed variable.

Indeed.

-Paul W.


More information about the TUHS mailing list