zoukankan      html  css  js  c++  java
  • 错误分析:floating point formats not linked

    最近在编写结构体-链表程序时,出现floating point formats not linked这样的错误提示,开始以为是自己编程的问题,可仔细检查核对没有什么错误。简写程序如下:

    #include<stdio.h>
    #include
    <stdlib.h>
    #include
    <conio.h>

    struct student
    {
      
    int num;
      
    float score;
      
    struct student *next;
    };
    void main()
    {
      
    struct student *p;
      clrscr();
      p
    =(struct student *)malloc(sizeof(struct student));
      scanf(
    "%d,%f",&p->num,&p->score);
      printf(
    "%d,%f",p->num,p->score);
      free(p);
    }
    程序没什么问题,可编译运行后当输入101,98时就会出现
    scanf:floating point formats not linked
    这样的错误,让人很郁闷。

    后来上网查了一些资料,才知道这是Borland run-time error ,详细说明如下:
    Why did my program bomb at run time with 'floating point formats not linked' or 'floating point not loaded'?

    --------------------------------------------------------------------------------

    Date: 5 Feb 2002 22:03:03 -0400

    These messages look similar but have very different causes.

    "Floating point not loaded" is Microsoft C's run-time message when the
    code requires a numeric coprocessor but your computer doesn't have one
    installed. If the program is yours, relink it using the xLIBCE or xLIBCA
    library (where x is the memory model).

    "Floating point formats not linked" is a Borland run-time error (Borland
    C or C++, Turbo C or C++). Borland's compilers try to be smart and not
    link in the floating- point (f-p) library unless you need it. Alas, they
    all get the decision wrong. One common case is where you don't call any
    f-p functions, but you have %f or other f-p formats in scanf() or
    printf() calls. The cure is to call an f-p function, or at least force
    one to be present in the link.

    To do that, define this function somewhere in a source file but don't
    call it:

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


    It doesn't have to be in the module with the main program, as long as
    it's in a module that will be included in the link.

    If you have Borland C++ 3.0, the README file documents a slightly less
    ugly work-around. Insert these statements in your program:

    extern unsigned _floatconvert;
    #pragma extref _floatconvert


    解决办法:
    只要在程序中加入任意红色部分就可以正常运行了。
    但其中的原理还是没搞明白。
    WHY?
  • 相关阅读:
    C++之函数模板
    Boost库初见
    C++之异常处理
    C++之运行时类型识别RTTI
    Qt5.4静态编译方法
    Altium Designer极坐标布局方法
    PM2.5空气质量指数(AQI)是如何计算的
    emWin学习课堂
    uboot 下更改NAND的分区 fdisk
    gps 数据解析-NMEA 0183协议
  • 原文地址:https://www.cnblogs.com/qixin622/p/734006.html
Copyright © 2011-2022 走看看