Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com o problema que já olhei para o código várias vezes mas não consigo resolver.Segue o código:
#include <stdio.h>
static const int valInit = 16252183;
/*
* Está variável não pode ser acessada por outros arquivos
* Está variável não pode ser alterada por outras funções
*/
geraCode(void) {
static int nmSerie = valInit * 7; // Gera um Número de Série Permanente nesta função
nmSerie = (nmSerie + 32) * 2; // Modifica o Número de Série
return nmSerie; // Retorna a Série Modificaa
}
int main(void) {
printf("%d\n", geraCode()); // Gera um Número de Série X
printf("%d\n", geraCode()); // Gera um Número de Série Y
}
Segue o erro:
brunoalano@brunoalano:~/C$ gcc -o Sta Sta.cSta.c: In function 'geraCode':
Sta.c:6: error: initializer element is not constant
Grato, Bruno Alano.
Eu acho que sim.
A função 'geraCode()' não está declarada corretamente.
Faltou declarar o tipo de retorno e além disso, você está tentando criar um conteúdo estático dentro da função e depois tentanto alterá-lo.
int geraCode(void) {
int nmSerie = valInit * 7; // Gera um Número de Série Permanente nesta função
nmSerie = (nmSerie + 32) * 2; // Modifica o Número de Série
return nmSerie; // Retorna a Série Modificaa
}Não há nada de errado em alterar variáveis declaradas com static. O termo somente define a duração do valor do objeto.
#include <stdlib.h>
#include <stdio.h>
#define VALINIT 16252183
unsigned long long int geraCode(void)
{
static unsigned long long int nmSerie = VALINIT * 7;
nmSerie = (nmSerie + 32) * 2;
return nmSerie;
}
int main(void)
{
printf("%Lu\n", geraCode());
printf("%Lu\n", geraCode());
return 0;
}
O problema do código, além da declaração da função geraCode(), era a linha de inicialização de nmSerie. O padrão define que objetos com duração estática só podem ser inicializados com **expressões** constantes.
A função geraCode() está declarada corretamente?