免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3458 | 回复: 11
打印 上一主题 下一主题

[函数] 定义的函数指针能指向系统函数吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-14 15:00 |只看该作者 |倒序浏览
问题如题,代码如下,请各位注意我注释的地方,在此感谢好心人回贴。。。:wink:

#include <stdio.h>
#include <math.h>
#define SIZE 3
typedef double (*V_FP_MTH)(double);
void transform(double *,double *,int,V_FP_MTH);
double add(double);
void print(double *,int);
int main(void)
{
        extern double sin(double);---引用系统函数申明,我觉得可以不要,但是我加还是出现错误
        extern double cos(double);
        double source[SIZE] = {1.2,5.0,3.3};
        double target[SIZE];
        //transform(source,target,SIZE,sin);  ------说明如果我不注释掉这几行,是可以运行的,
        //print(target,SIZE);                           -----在这之前我都用extern申明引用了库函数,
        //transform(source,target,SIZE,cos); ----但还是有错误消息提示(见下),是不是不能指
        //print(target,SIZE);  ----向系统的函数?
        transform(source,target,SIZE,add);
        print(target,SIZE);
        return 0;
}
void transform(double *s,double *t,int num,V_FP_MTH fp)
{
        int i;
        for(i = 0;i < num;i++)
                t[i] = (*fp)(s[i]);
}
void print(double *s,int num)
{
        int i;
        for(i = 0;i < num;i++)
                printf("%lf",s[i]);
        printf("\n";
}
double add(double x)  --测试用,可以通过
{
        return x+10;
}



错误提示:
In function 'main':
:undefined reference to 'sin'
collent2:ld returned 1 exit status
是不定义的函数指针不能指向系统定义的函数????,望解答,谢谢,希望这问题描述清楚了

论坛徽章:
0
2 [报告]
发表于 2007-04-14 15:26 |只看该作者
不是,是链接时没找到包含sin函数的库。编译时加上-lm参数

论坛徽章:
0
3 [报告]
发表于 2007-04-14 15:32 |只看该作者
谢谢二楼,问题解决,那为什么在包含其他库,编译的时候不用其他的参数呢?

[ 本帖最后由 andyxie407 于 2007-4-14 15:37 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-04-14 15:39 |只看该作者
nm /usr/lib/libc.a | grep sin
nm /usr/lib/libc.a | grep printf
nm /usr/lib/libm.a | grep sin
nm /usr/lib/libm.a | grep printf

论坛徽章:
0
5 [报告]
发表于 2007-04-14 15:54 |只看该作者
原帖由 andyxie407 于 2007-4-14 15:32 发表
谢谢二楼,问题解决,那为什么在包含其他库,编译的时候不用其他的参数呢?


取决于连接器链接时自动链接哪些库。
三楼的方法可以试试,nm命令可以找出binary文件中的符号信息。不过那要你正则表达式用的好才方便。呵呵

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2007-04-14 19:49 |只看该作者
原帖由 andyxie407 于 2007-4-14 15:00 发表
:undefined reference to 'sin'


看来这个错误信息令很多人迷惑。这都是不了解 declaration 和 definition 的区别以及不清楚 C 的编译链接原理造成的。再一次的回到了基础问题……

论坛徽章:
0
7 [报告]
发表于 2007-04-14 19:55 |只看该作者
原帖由 MMMIX 于 2007-4-14 19:49 发表


看来这个错误信息令很多人迷惑。这都是不了解 declaration 和 definition 的区别以及不清楚 C 的编译链接原理造成的。再一次的回到了基础问题……


这很可能成为本版 FAQ 的内容。不过我的理解是,一方面不少人由于缺乏扎实的英语基础,也就很难处理编译器和连接器报告的错误;另一方面缺乏经验,缺乏程序设计的基本知识和概念,思维上也有一定的惰性,于是发帖来求助各自的问题。

.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2007-04-14 20:44 |只看该作者
原帖由 langue 于 2007-4-14 19:55 发表
这很可能成为本版 FAQ 的内容。不过我的理解是,一方面不少人由于缺乏扎实的英语基础,也就很难处理编译器和连接器报告的错误;另一方面缺乏经验,缺乏程序设计的基本知识和概念,思维上也有一定的惰性,于是 ...


一言以蔽之,懒。这话可能有点过激 不过,许多人确实没有主动解决问题的习惯,碰到问题也缺乏查资料的习惯和能力。记得以前看到一篇文章,讲美国的小学教育,其中给我印象最深刻的就是他们的学校和老师会有意识的培养学生通过自己查阅资料解决问题的意识和能力(例如布置一些需要查阅大量资料才能完成的家庭作业,等等),而且这种培养是从学生很小的时候就开始的。我们的学校在这方面几乎什么都没有做。

现在通过网络能查(搜索)到的资料数量是很惊人的,我们碰到的许多问题很可能已经被反复问起并回答过若干遍了。有句老话是怎么说来着,“太阳底下没什么新鲜事”。所以碰到问题先搜索肯定是错不了的。

[ 本帖最后由 MMMIX 于 2007-4-14 20:48 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-04-19 19:38 |只看该作者
谢谢楼上的大牛的诚恳的批评,今天看到资料才知道是库包含和包含头文件不是同的,头文件提供函数申明和原型,而库选项告诉系统到那里找函数代码,看来这些东西真的是要积累起来。。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2007-04-19 20:52 |只看该作者
原帖由 andyxie407 于 2007-4-19 19:38 发表
谢谢楼上的大牛的诚恳的批评,

我就是发两句牢骚,没有要批评谁的意思 至于”大牛“的称呼则更是当不起。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP