Página 1 de 1

Warning no Keil "ponteiro"

MensagemEnviado: 12 Jan 2007 09:53
por styg
no keil para arm...

to fazendo isso:

char portugues[TELAS][CARACT] = {"Ola ","tchau "};
char english [TELAS][CARACT] = {"Hello ","goodbye "};
char *idioma;

idioma = portugues; (1)

TES.C(62): warning C91: '=': pointer to different objects
TES.C(62): warning C91: '&': pointer to different objects

os avisos são referentes à linha (1), o keil compila na boa, gravei e funfou como queria, mudo o idioma fazendo o ponteiro apontar para a matriz desejada.

mas soh por curiosidade, pois nao descobri o pq desse aviso...


falow ;)

MensagemEnviado: 12 Jan 2007 10:16
por gibim
No Keil a explicação é esta:

Summary *** Warning C91
operator: Pointer to Different Objects

Description The operands of the specified operator are pointers to different objects. For example: pi = pl where pi is int * and pl is long * will give warning 91.

Eu compilei oque você fez e funcionou também. Não deu nenhum erro.

#define TELAS 10
#define CARACT 10
char portugues[TELAS][CARACT] = {"Ola ","tchau "};
char english [TELAS][CARACT] = {"Hello ","goodbye "};
char *idioma;

int main(int argc, char *argv[])
{
idioma = *portugues;
idioma = *english;

idioma = (char*)&portugues;
idioma = (char*)&english;

while(1);

return(0);
}

Re: Warning no Keil "ponteiro"

MensagemEnviado: 12 Jan 2007 10:21
por Viktor
char *idioma = ponteiro para uma string
char portugues[][] = ponteiro para uma tabela de strings

Conclusão : Ponteiros para objetos diferentes

Re: Warning no Keil "ponteiro"

MensagemEnviado: 12 Jan 2007 20:47
por ivan
Viktor escreveu:char *idioma = ponteiro para uma string
char portugues[][] = ponteiro para uma tabela de strings

Conclusão : Ponteiros para objetos diferentes


Pegando carona...

idioma = (char*) portugues[0];

deve resolver o prob.
E warning não dá êrro, é aviso de que uma correção deve ser feita...

MensagemEnviado: 15 Jan 2007 07:15
por styg
bom como vcs falaram ai..

troquei

idioma = portugues;

por

idioma = portugues[0];

isso bastou pra resolver o problema, sumiram os avisos.

quanto a esse:

idioma = (char*) portugues[0];

esse char entre parenteses é soh especificando o tipo de variavel msm? e o asterisco por ser ponteiro?


valeu ivan, viktor e gibim :p

MensagemEnviado: 15 Jan 2007 11:01
por gibim
Esse (char*) é chamado de typeCast, ou seja, você está informando ao compilador que o tipo do elemento a frente é conhecido, ou que mesmo sendo diferente não vai dar problemas.

Quando se faz isso, o compilador assume que está tudo certo e não dá nenhum aviso, mas pode acontecer certos problemas de alinhamente se inicialmente você projeta para ler em char e de repente, muda o tipo pra int.

Use os typeCast de forma cautelosa... Já tive problemas de "esquecimento" pois tinha declarado um tipo, mudado, e quando compilava, ele não dava os warning pois tinha inserido o (char*)