gcc: why is "abcdef"[3] not a constant (error: initializer element is not constant)

Didier Kryn kryn@in2p3.fr
Fri May 8 14:14:00 GMT 2015


     m-h-l,

     Your expression just doesn't make any sense in C; therefore it 
would be very bad for whatever C compiler to give it one.

     Please, I don't want to know what it could mean in C++. Maybe you 
are a victim of the old statement that "C++ = C plus the class". But the 
two languages have started to diverge from the beginning, maybe two 
decades ago.

     You are not going to write working C programs by assuming that "C = 
C++ minus the class". You should better start from scratch with a C 
handbook.

     Didier

Le 08/05/2015 15:34, m-h-l a écrit :
> I guess you refer to this part of the standard:
>
> "The array-subscript [] and member-access . and -> operators, the address &
> and indirection * unary operators, and pointer casts may be used in the
> creation of an address constant, but the value of an object shall not be
> accessed by use of these operators."
>
> Funny thing is that g++, ArmC and ICC do not have a problem with "abcdef"[3]
> as an initializer.
> So I wonder what shall be the sense to forbid this in gcc.
> This way I cannot use gcc to calculate e.g. CRCs or Hashs over real constant
> things at build time without extra tools, even not in such a clear case as
> here. With the other compilers its no problem.
>
> What a pity!
>
>
>
> --
> View this message in context: http://gcc.1065356.n5.nabble.com/gcc-why-is-abcdef-3-not-a-constant-error-initializer-element-is-not-constant-tp1146945p1147037.html
> Sent from the gcc - Help mailing list archive at Nabble.com.




More information about the Gcc-help mailing list