Re: [dev] dwm alpha patch: const isn't a const??

From: Paul Swanson <psw_AT_protonmail.com>
Date: Sun, 26 May 2019 09:50:34 +0000

Thanks for the swift reply Michael.

I just checked, my GCC is 6.3 ... ugh. I'd just run up a new install of MX Linux 18.2, for the first time, to check it out.

I wonder if this is a scenario that could be prevented /better identified through build flags or something.

Anyway, I'll explore that angle.

Cheers,

Paul Swanson

Sent from ProtonMail, encrypted email based in Switzerland.

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Sunday, May 26, 2019 6:39 PM, Michael Forney <mforney_AT_mforney.org> wrote:

> On 2019-05-26, Paul Swanson psw_AT_protonmail.com wrote:
>
> > Hello,
> > I've a fresh clone of dwm and the dwm alpha patch (20180613-b69c870) and
> > it's generating
> > the following error:
> >
> > dwm.c
> > In file included from dwm.c:280:0:
> > config.h:24:27: error: initializer element is not constant
> > [SchemeNorm] = { OPAQUE, baralpha, borderalpha },
> > ^~~~~~~~
> > config.h:24:27: note: (near initialization for ‘alphas[0][1]’)
> > config.h:24:37: error: initializer element is not constant
> >
> >
> > What I can't understand, is the fact that 'baralpha', and all the other
> > variables
> > accused of not being constants are in fact declared as "static const
> > unsigned int":
> >
> > static const unsigned int baralpha = 0xd0;
> > static const unsigned int borderalpha = OPAQUE;
> >
> >
> > If I substitute the initialising variables for a numeric literal (ie. 1) it
> > compiles.
> > But if I leave the constants from the patch or make my own, it fails.
> > How can a const, not be a const?
> > Any help would be greatly appreciated.
>
> I'm not familiar with the alpha patch, but in standard C, initializer
> elements need to be constant expressions, which is different from an
> identifier for a const-qualified object. See
> http://port70.net/~nsz/c/c99/n1256.html#6.6p7 for what is allowed in
> initializers for static objects.
>
> Perhaps the author of the patch was using a compiler that allows these
> initializers (it looks like gcc-8 does, but gcc-7 does not).
>
> If you want a portable way to use an identifier in an initializer for
> a global, you have to use a preprocessor define like `#define baralpha 0xd0`, or enum constant like `enum { baralpha = 0xd0 };`.
Received on Sun May 26 2019 - 11:50:34 CEST

This archive was generated by hypermail 2.3.0 : Sun May 26 2019 - 12:00:09 CEST