gRoOvE 0 Denunciar post Postado Setembro 1, 2008 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
Kandrade 7 Denunciar post Postado Setembro 1, 2008 Eu acho que rola Isis. Eles analisam o erro para depois reportar como um bug? É estranho isso, não tem fundamento. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Setembro 1, 2008 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