Ir para conteúdo

POWERED BY:

Arquivado

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

Glaucco

C media entra números

Recommended Posts

Eu sei que tá muito estranho isso, será que não é alguma especificidade da própria função?

 

Só não entendi tb ali onde divido A/B e mostro como int, fica zero o resultado, não deveria pegar a primera casa antes da vírgula?

Pq retorna zero, ta certo isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrei alguém com o mesmo problema:

http://gcc.gnu.org/ml/gcc-bugs/2007-06/msg02187.html

 

A lista de follow-ups é gigante,mas dá p/ notar um post onde se fala de falha de segurança:

http://gcc.gnu.org/ml/gcc-bugs/2007-06/msg02666.html

 

Notem como a criatura diz p/ usar o -Wformat... Mas isso não resolve nada,afinal é só uma flag do compilador de warning sobre tipos em tempo de compilação e não de execução. Os códigos continuam imprimindo errado do mesmo jeito.

 

 

Uma coisa: quantos de vcs aprenderam que %f era pra argumentos do tipo float, de 4 bytes? Pois é,na minha manpage diz que f,F trata double. Como o -Wformat diz que espera um double, só dá p/ concluir que quando vcs forem imprimir tipos menores o casting é obrigatorio e mais parênteses são necessários.Vejam a diferença:

 

#include <stdio.h>
int main() {
float A=9,B=2,c;
int d;
c = 10/3;
d = 10/3;
printf("%f\n",A/B);
printf(" %d   %f   D=%d   D=%d   D=%d   %f   %f   %f   %f  %f\n",(int)(A/B),(float)(A/B),d,d,d,d,d,d,d,d);
return 0;
}

 

isis@linux-0khy:~/src> gcc cast.c -o cast -Wformat

cast.c: In function ‘main’:

cast.c:8: warning: format ‘%f’ expects type ‘double’, but argument 7 has type ‘int’

cast.c:8: warning: format ‘%f’ expects type ‘double’, but argument 8 has type ‘int’

cast.c:8: warning: format ‘%f’ expects type ‘double’, but argument 9 has type ‘int’

cast.c:8: warning: format ‘%f’ expects type ‘double’, but argument 10 has type ‘int’

cast.c:8: warning: format ‘%f’ expects type ‘double’, but argument 11 has type ‘int’

isis@linux-0khy:~/src> ./cast

4.500000

4 4.500000 D=3 D=3 D=3 0.000000 0.000000 -0.000000 -0.962673 0.000000

isis@linux-0khy:~/src>

 

Acho que uma explicação p/ isso está na pilha da função,mas se eu não tenho acesso ao frame via step into não dá p/ dizer o que acontece. Mas um chute é que o stack pointer recebe o incremento errado.

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.