Twitter

Arquivos mensais

Categorias

Bug do Borland Turbo C

scanf : floating point formats not linked
Abnormal program termination

Atormentado com este bug sem solução? Sua vida de programador no TurboC fica tumultuada quando quer usar números não inteiros? Acha que a Borland é incompetente? Talvez tenha razão, mas…

SEUS PROBLEMAS ACABARAM!!!

Eu estava realmente encafifado com este famigerado problema. Ele ocorre às vezes quando executamos nosso programa e dá erro quando vai ler alguma variável do tipo float. Pesquisei e encontrei a explicação. Há não apenas uma, mas duas maneiras de dar um jeito para solucionar. Testei apenas uma: basta inserir o trecho a seguir no início do código-fonte do seu (outrora infeliz) programa:

extern unsigned _floatconvert;
#pragma extref _floatconvert

Agradeçam por esta “mágica” ao cidadão Jeffrey Carlyle, que mantém um site de perguntas e respostas a respeito de programação para MS-DOS a partir de uma coleção de mensagens da antiga Usenet. O endereço deste achado: http://www.faqs.org/faqs/msdos-programmer-faq/part2/section-5.html

O que acontece, pelo que entendi, é que o Turbo C, tentando ser inteligente, não inclui na link-edição do programa (veja a definição disto na Wikipedia anglófona) a biblioteca de ponto flutuante a não ser que seja ostensivamente necessária (desinteligência artificial!), ou seja, apenas inclui a biblioteca se houver alguma função que explicitamente utilize ponto flutuante. Acontece que em certas situações ele não acerta em sua escolha, principalmente quando utilizamos %f em funções de entrada/saída como scanf e printf.

A solução acima, segundo o site supracitado, pode ser encontrada no arquivo README do Borland C++ 3.0. Contudo, bastaria incluir em seu código-fonte qualquer referência a uma função de ponto flutuante, sem chamar a mesma. A sugestão dada é:

static void forcefloat(float *p)
{
float f = *p;
forcefloat(&f);
}

Espero que isto seja de alguma ajuda eventualmente. Para mim, foi.

Artigo publicado originalmente no fórum do curso de Sistemas de Informação do Centro Universitário de Maringá.


Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>