I've looked at these and they do not answer my question:
variable-sized object may not be initialized
C compile error: "Variable-sized object may not be initialized"
Error: Variable-sized object may not be initialized. But why?
I am trying to write some fairly portable c
code:
int main ()
{
const int foo=13;
int bar[foo]={0};
return 0;
}
I get a `variable-sized object may not be initialized` error when compiling as `c` code using either:
- gcc 4.3.4
- arm-linux-gnueabi-gcc 4.4.5
And if i compile it as c
in VS2008 i get a slightly different error C2057: expected constant expression
I understand that here, the c
code compiler is not recognising const int foo=13;
to be truly constant; for example we might have
void a(int fool)
{
const int foo=fool;
int bar[foo]={0};
}
I also realise that unlike the gcc compilers, the VS2008 compiler has no concept of C99 variable-length arrays. And that MS apparently has not mentioned any future support.
And yet, cpp
code compilation with either gcc or MS compilers is altogether different/cleverer ?!
And also *what i do not understand* regarding the **gcc** `c` code compiler is:
- since this code does compile,
int main ()
{
int bar[13]={0};
return 0;
}
- why this code does not compile..
int main()
{
const int foo=13; //cpp compiler knows this really is const !
int bar[foo]={0};
return 0;
}
- and yet this code does compile?
int main()
{
const int foo=13;
int bar[foo+1]={0}; //wtF?
return 0;
}
(NB: in this last case, MS c
code compilation fails; consistently as with int bar[foo]={0};
)
cpp
compilation tests. – Parsaye