在vs2010(Win32控制台应用程序模板)中编译错误以获取以下代码。我该如何解决呢?
unsigned long long int Fibonacci[numFibs]; // error occurred here
错误C2057:预期的常量表达式
错误C2466:无法分配常量大小为0的数组
错误C2133:'斐波那契':未知大小
附上完整的代码(这是编程中的示例代码在c-3E书中。没有任何修改)
int main()
{
int i, numFibs;
printf("How may Fibonacci numbers do you want (between 1 to 75)? ");
scanf("%i", &numFibs);
if ( numFibs < 1 || numFibs > 75){
printf("Bad number, sorry!\n");
return 1;
}
unsigned long long int Fibonacci[numFibs];
Fibonacci[0] = 0; // by definition
Fibonacci[1] = 1; // ditto
for ( i = 2; i < numFibs; ++i)
Fibonacci[i] = Fibonacci[i-2] + Fibonacci[i-1];
for ( i = 0; i < numFibs; ++i)
printf("%11u",Fibonacci[i]);
printf("\n");
return 0;
}
答案 0 :(得分:2)
VS2010默认是C ++编译器,C ++不支持可变长度数组。您可以更改项目以将代码编译为C代码,但VS2010仍然不支持C99。
我建议您使用gcc
作为C代码,它更符合要求。
答案 1 :(得分:1)
你不能拥有一个可变长度的数组。使用动态分配返回指针(malloc)
答案 2 :(得分:1)
动态分配数组或使用常量数组。
#define kMaxFibs 75
...
if ( numFibs < 1 || numFibs > kMaxFibs){
...
unsigned long long int Fibonacci[kMaxFibs];
答案 3 :(得分:1)
您使用的是哪种编译器?你在编译C或C ++吗? 自C99以来,可变长度数组在C中是合法的,但如果您使用较旧的编译器(或编译为C ++),它们将无法工作。
作为解决方法,您可以切换到使用动态分配:
typedef unsigned long long uint64; // just for convenience
uint64* Fibonacci = (uint64*)malloc(sizeof(uint64)*numFibs);
// {code here}
// then at the end:
free(Fibonacci);
return 0;