Gerando números de fibonacci usando o erro de compilador de código de matrizes de comprimento variável

StackOverflow https://stackoverflow.com/questions/3042755

  •  27-09-2019
  •  | 
  •  

Pergunta

Erro de compilação no VS2010 (modelo de aplicativo do console Win32) para o código abaixo. Como posso consertar isso.

unsigned long long int Fibonacci[numFibs]; // error occurred here

Erro C2057: expressão constante esperada

Erro C2466: Não é possível alocar uma variedade de tamanho constante 0

Erro C2133: 'Fibonacci': tamanho desconhecido

Código completo anexado(É um código de amostra da programação no livro C -3e. Sem modificar)

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;

}
Foi útil?

Solução

Qual compilador você está usando? E você está compilando como C ou C ++? Matrizes de comprimento variável são legais em C desde C99, mas se você estiver usando um compilador mais antigo (ou compilando como C ++), eles não funcionarão.

Como solução alternativa, você pode mudar para usar a alocação dinâmica:

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;

Outras dicas

O VS2010 é um compilador C ++ por padrão e o C ++ não suporta matrizes de comprimento variável. Você pode alterar seu projeto para compilar código como código C, mas o VS2010 ainda não suporta C99.

Eu recomendaria que você use gcc Para o código C, é muito mais conformante.

Você não pode ter uma matriz de comprimento variável. Use alocação dinâmica Ponteiro de retorno (MALLOC)

Aloce dinamicamente a matriz ou use um tamanho de matriz constante.

#define kMaxFibs 75
...
if ( numFibs < 1 || numFibs > kMaxFibs){
...
unsigned long long int Fibonacci[kMaxFibs];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top