Reputation: 122630
I'm writing C in Visual Studio 2010. The compiler doesn't seem to want to let me use inline variable declarations. The following code produces an error:
unsigned int fibonacci_iterative(unsigned int n) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
unsigned int prev_prev = 0; // error
unsigned int prev = 1; // error
unsigned int next = 0; // error
for (int term_number = 0; term_number < n; term_number++) {
unsigned int temp = prev_prev + prev;
prev = next;
prev_prev = prev;
next = temp;
}
return next;
}
Error:
error C2143: syntax error : missing ';' before 'type'
error C2143: syntax error : missing ';' before 'type'
error C2143: syntax error : missing ';' before 'type'
Why is this happening? Is there a setting to make the compiler not so strict?
Upvotes: 11
Views: 4709
Reputation: 90174
Putting declarations after non-declarations isn't allowed in C89, although it is allowed in C++ and in C99 (MSVC still doesn't support C99, though).
In C89, you can achieve a similar effect by using a nested block:
unsigned int fibonacci_iterative(unsigned int n) {
if (...) {
}
{
unsigned int prev_prev = 0;
unsigned int prev = 1;
unsigned int next = 0;
...
}
}
Upvotes: 10
Reputation: 66073
Inline variable declarations are only supported in a C99 compliant compiler. Microsoft Visual C++ doesn't seem to be C99-compliant (ref). You're either going to have to use a C99-compliant compiler (GCC will compile code with inline variables when used with -std=c99
) or declare your variables at the top of the function.
EDIT: Or try C++ mode, as suggested by akallio, though C and C++ aren't strictly compatible with each other, so if (for example), you use any C++-specific keywords in your C code, it won't compile.
Upvotes: 1
Reputation: 1647
Try to compile it as C++. C99 will allow variables to be declared other than the top of scope, but VC doesn't know about C99.
Upvotes: 1