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 を実際にはサポートしていません。

Cコードに使用することをお勧めしますgcc。これははるかに準拠しています。

于 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 に答える