QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1027|回复: 8

为何调用数学函数得不出结果?

[复制链接]
发表于 2005-5-24 12:49:32 | 显示全部楼层 |阅读模式
我在调用数学函数时,为何得不出正确的结果?程序如下:
#include <stdio.h>
#include <math.h>

main()
{
        double x;
        scanf("%f",x);
        printf("%f",sin(x));
        return 0;
}
最后的值总是0.0000000
发表于 2005-5-24 13:07:23 | 显示全部楼层
float x;
scanf("%f",&x);
回复

使用道具 举报

 楼主| 发表于 2005-5-24 13:32:13 | 显示全部楼层
有提示说:undefine referance to sin().
什么原因?。。。郁闷啊?
回复

使用道具 举报

发表于 2005-5-24 17:43:09 | 显示全部楼层
gcc xxx.c -o xxx -lm
回复

使用道具 举报

 楼主| 发表于 2005-5-24 19:17:45 | 显示全部楼层
thank you.mozilla.use the "gcc xxx.c -o xxx -lm"can work fine.but I want know what's mean is '-lm'.
here is another same question:
#include <stdio.h>
#include <math.h>

main()
{
        int x,k;
        printf("please enter the value of x\n");
        scanf("%d",&x);
        printf("%d\n",x);
        k = fabs(x);
        printf("the x = %d k = %d\n",x,k);
        printf("now x = %d\n",x);              /***here work fine.***/
        printf("fabs(x) = %d\n",fabs(x));      /***but here work worng,the result is fabs(x) = 0.why?****/
        return 0;
}
thank you.
回复

使用道具 举报

 楼主| 发表于 2005-5-24 23:08:22 | 显示全部楼层
我知道了。因为math.h是函数原形,需要进行动态链接才能使用所以要用-lm参数。
-lm:ld+math.h
ld是连接器。
回复

使用道具 举报

发表于 2005-5-25 01:15:15 | 显示全部楼层
[quote:05673d7267="liuyishao"]我知道了。因为math.h是函数原形,需要进行动态链接才能使用所以要用-lm参数。
-lm:ld+math.h
ld是连接器。[/quote]

看来linux里的程序设计和windows里的很不一样啊

动态链接?——请问什么是动态链接?
还有,在linux里有哪些头文件是要用动态链接的呢?
回复

使用道具 举报

发表于 2005-5-25 09:34:23 | 显示全部楼层
-lm:ld + libm.so
除了libc.so.x,ld-linux.so.x外,如果用到其它的库基本上都要用-l指定。
“在linux里有哪些头文件是要用动态链接的呢?”这句话问得有问题。
linux库有两种,一种是静态连接库,一般扩展名是.a,一种是动态链接库,扩展名是.so。
如果用静态链接库,那么编译器在编译时就将静态库包含到程序里面,程序在运行时就可以不用那些库支持了,但缺点是程序会变大。
如果用动态链接库,那么程序在运行时系统才会将动态库装载进来供程序调用。
跟头文件基本没什么关系。
不知道解释得对不对。
回复

使用道具 举报

发表于 2005-5-31 02:08:35 | 显示全部楼层

不是很明白啊
等再过一久,我再熟悉熟悉 linux 结构原理再来看看

多谢斑竹回答!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 21:34 , Processed in 0.049655 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表