This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Using Compound Literal + type-punning to initialize static const array


On Fri, 28 Nov 2014, Mason wrote:

> On 24/11/2014 17:53, Mason wrote:
> 
> > Consider the following code: [big snip]
> 
> (Perhaps my previous message was too verbose.)
> 
> Why does gcc reject the following code:
> 
> union foob { int val; struct { int X; } bits; };
> static const int u = ((union foob) {.bits = { .X=42 }}).val;
> 
> $ gcc -std=gnu89 test.c
> test.c:2:30: error: initializer element is not constant
>   static const int u = ((union foob) {.bits = { .X=42 }}).val;

For the reason stated in the error message: that initializer is not a 
constant expression (it involves access to an anonymous object).  There is 
a limited allowance in GNU C for when the initializer is a compound 
literal of the right type (so that you can define a macro of a structure 
or union type that expands to something usable in both assignments and 
initializers), but not for any more complicated operations involving them.

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]