News for hackers. Stuff that matters.
Re:Modern C, Second Edition by loeg on Wednesday September 18, 2019 @03:22PM (#21008973)
Rarely does someone mean:

    int *const foo;
It's mostly useless to declare a variable that cannot be assigned. But very often people write

    const int **foo;
When they intended

    const int * const *foo;
Re:Modern C, Second Edition by JoachimSchipper on Thursday September 19, 2019 @08:44AM (#21015614)
FWIW, I find that form quite useful for defining short aliases, e.g.

    int *const current_foo = &items[i].bar.foo;
before some complicated manipulations on current_foo.

(A decent (SSA-)optimizing compiler will produce identical code with and without the declaration.)

Re:Modern C, Second Edition by loeg on Friday September 20, 2019 @12:43AM (#21023387)
Yeah, this only works if you initialize at the same time as declaration. And as you say, without const, the same code is generated. All it prevents is accidental reuse of current_foo, which may have some value.
Re:Modern C, Second Edition by tempodox on Thursday September 19, 2019 @03:37AM (#21014145)
> It's mostly useless to declare a variable that cannot be assigned.

So all functional languages (where immutability is the default) are mostly useless?

Re:Modern C, Second Edition by loeg on Friday September 20, 2019 @12:44AM (#21023388)
If you declare a variable in this way in C, it can never be assigned. Not once — zero times.

What is or is not good practice in C has little bearing on or relationship to functional languages, so I'm not sure why you bring them up in this context.