Why can't we initialize members inside a structure? Why can't we initialize members inside a structure? c c

Why can't we initialize members inside a structure?


If you want to initialize non-static members in struct declaration:

In C++ (not C), structs are almost synonymous to classes and can have members initialized in the constructor.

struct s {    int i;    s(): i(10)    {    }};

If you want to initialize an instance:

In C or C++:

struct s {    int i;};...struct s s_instance = { 10 };

C99 also has a feature called designated initializers:

struct s {    int i;};...struct s s_instance = {    .i = 10,};

There is also a GNU C extension which is very similar to C99 designated initializers, but it's better to use something more portable:

struct s s_instance = {    i: 10,};


The direct answer is because the structure definition declares a type and not a variable that can be initialized. Your example is:

struct s { int i=10; };

This does not declare any variable - it defines a type. To declare a variable, you would add a name between the } and the ;, and then you would initialize it afterwards:

struct s { int i; } t = { 10 };

As Checkers noted, in C99, you can also use designated initializers (which is a wonderful improvement -- one day, C will catch up with the other features that Fortran 66 had for data initialization, primarily repeating initializers a specifiable number of times). With this simple structure, there is no benefit. If you have a structure with, say, 20 members and only needed to initialize one of them (say because you have a flag that indicates that the rest of the structure is, or is not, initialized), it is more useful:

struct s { int i; } t = { .i = 10 };

This notation can also be used to initialize unions, to choose which element of the union is initialized.


Note that in C++ 11, the following declaration is now allowed:

struct s {   int i = 10;};

This is an old question, but it ranks high in Google and might as well be clarified.