1

以下代码在 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;

}
4

4 回答 4

2

VS2010默认是C++编译器,C++不支持变长数组。您可以更改您的项目以将代码编译为 C 代码,但 VS2010 仍然不真正支持 C99。

我建议您使用gccC 代码,它更符合标准。

于 2010-06-15T05:42:58.117 回答
1

你不能有一个可变长度的数组。使用动态分配返回指针(malloc)

于 2010-06-15T05:37:59.363 回答
1

动态分配数组或使用常量数组大小。

#define kMaxFibs 75
...
if ( numFibs < 1 || numFibs > kMaxFibs){
...
unsigned long long int Fibonacci[kMaxFibs];
于 2010-06-15T05:40:30.917 回答
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;
于 2010-06-15T05:45:12.527 回答