• 错误分析: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?
  • 相关阅读:
    qunar面试题及一位大牛的解答
    深入理解js里面的this
    用js实现的一个可拖动标签的例子
    Linux启动详细过程(开机启动顺序)
    linux下用top命令查看cpu利用率超过100%
    linux内核内存管理(zone_dma zone_normal zone_highmem)
    用户线程与内核线程如何映射?
    Linux用户空间与内核地址空间
    linux超级块和inode 详解 和 df 、du 命令详解与环境变量
    内核空间、进程和线程等概念
  • 原文地址:https://www.cnblogs.com/qixin622/p/734006.html
Copyright © 2020-2023  润新知