Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Alano

Erro com Static e Const

Recommended Posts

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.c

Sta.c: In function 'geraCode':

Sta.c:6: error: initializer element is not constant

 

 

Grato, Bruno Alano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.