#include <stdio.h>

main(){

  printf("%g\n", sqrt(2));

}

在某些系统中打印结果是:

%g

请问这是为什么?

 

    在某些C语言实现中,存在着两种不同版本的printf函数:其中一种实现了用于表示浮点格式的项,

如%e,%f,%g等,而另一种却没有实现这些浮点格式。库文件中同时提供了printf函数的两种版本,这

样的话,那些没有用到浮点计算的程序,就可以使用不提供浮点格式支持的版本,从而节省程序空间、

减少程序大小。

    在某些系统上,编程者必须显式的通知连接器是否用到了浮点运算。而另一些系统,则是通过编译器

来告诉连接器在程序中是否出现了浮点运算,以自动地作出决定。上面的程序没有进行任何浮点预算!

他既没有包含math.h头文件,也没有声明sqrt函数,所以,编译器无从得知sqrt是一个浮点函数。这个

程序甚至都没有传送一个浮点参数给sqrt函数。所以,编译器“自认合理”地通知连接器,该程序没有进行

浮点运算。
    那sqrt函数又怎么解释呢?难道sqrt函数时从库文件中取出的这个事实,还不足以证明该程序用到了浮

点运算?当然,sqrt函数是从库文件中取出的这一点没错;但是,连接器可能在从库文件中取出sqrt函数

之前,就已经做出了使用何种printf函数的决定。

相关文章:

  • 2022-02-03
  • 2021-11-23
  • 2022-01-20
  • 2022-12-23
  • 2021-11-14
  • 2021-05-26
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-21
  • 2021-08-10
  • 2022-02-20
  • 2021-06-06
  • 2021-05-30
  • 2021-10-25
  • 2021-12-10
相关资源
相似解决方案