VC6.0的BUG_1_浮点运算相关

VC_6中对代码进行预处理时,扫描代码,若代码中没有浮点型的运算,就不进行约定

错误与头文件无关

请添加图片描述
问题出在 cinit() 中 初始化浮点协处理器的步骤中:_FPinit(初始化浮点处理器),要占用浮点协处理器,从80386开始,处理器就带协处理器8087和主处理器8088,两个处理器一个专门负责整数的处理、一个专门负责浮点小数的处理,此时两个处理器可能冲突,所以需要初始化约定两个处理器如何配合工作(两者配合工作方式的选择:同步、异步,一般协处理器负责浮点的运算,也就是说计算浮点时,主处理器是否要等待浮点运算计算完成使用浮点运算得出的结果),无论整数主处理器是否要等待浮点协处理器,都要进行事先的约定(这就是浮点协处理器初始化的任务之一),对于VC6这种低版本的编译器的做法是,对代码进行预处理前,会先扫描代码,若代码中没有浮点型的运算,就不进行约定(*_FPinit这个函数指针的值置为0,则表示不进行调用,就没有约定,没有初始化),有浮点型运算才会约定。

那么,对于上述代码,由于只是定义了浮点型变量,并没有浮点型的运算(赋值也算浮点型运算,所以上述代码运行后使用scanf对浮点型变量进行赋值时,进行浮点运算就会出现错误),所以不会进行约定,此时就会出现错误

所以想解决上述问题,最简单的只要在代码中对一个浮点型变量先赋一个值,扫描时可以扫描到浮点运算即可(是不是f都可以,随便定义一个也可以),即可解决

新版本的解决过程,就是无论是否进行浮点型变量的运算,都进行约定

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值