| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 889 人关注过本帖
标题:如何判定某个函数是否可用?
只看楼主 加入收藏
CodeWays
Rank: 2
等 级:论坛游民
帖 子:62
专家分:61
注 册:2010-2-7
结帖率:66.67%
收藏
已结贴  问题点数:100 回复次数:11 
如何判定某个函数是否可用?
比如我想使用qsort标准库函数,但是不确定是否可用,怎样在程序编译时进行判断呢?

比如用define在程序编译时判断一下,然后做个替换什么的?。。。能实现吗?
搜索更多相关主题的帖子: 如何 
2011-04-05 11:33
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:11 
我觉得编译器只对语法做检查,对程序里的逻辑错误无动于衷。如果qsort不可用,则会提示相应的出错信息。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-05 12:12
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:11 
qsort (数组名,数组元素个数,单个元素占用存储空间,排序方法)
只要#include<stdlib.h>应该就可以用的.

   唯实惟新 至诚致志
2011-04-05 13:06
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:11 
普通函数可以在任何时候  任何地方都是可以调用的

标准库里面的函数只要你包含了它的头文件就可以调用了  比较特殊的是静态函数

它的访问权限仅仅在本文件内  还有就是C++里面的类的私有和保护函数  也是只能在

类的内部成员函数被访问  对于你所说的我觉得普通的函数  编译器应该不会去

提示你可以或者是不可以调用  如果你真的要判断你可以要在预编译的时候判断一下是否包含了它的头文件

这样就可以判断是否可以调用了  不过这不是楼主的本意   呵呵  我是菜鸟一个

                                         
===========深入<----------------->浅出============
2011-04-05 13:29
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
收藏
得分:11 
linux下可以使用dlopen载入.so然后用dlsym寻找相应函数句柄吧,我觉得windows下有类似机制,不过我没研究过
2011-04-05 13:39
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:11 
只要没语法问题,编译器都不报错
如果想测试函数,只有单独写个程序单独用这函数试试

我的地盘
2011-04-05 21:39
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:11 
分数很多 给点我

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-04-05 22:54
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:11 
你就跑一下试试也没什么关系嘛。



其实正常的方法在编译程序前还有一步呢,就是检查系统环境。
用过 unix-like 系统的人,不太可能不知道 make 前,还有一步 configure。

一般都是用脚本解决,思路像这样:
前写一个类似这样的程序:
程序代码:
#incdlue <stdlib.h>

int main()
{
    qsort(...)

    return 0;
} 
然后编译它,并观察编译器的返回状态。如果是 0,说明成功编译了。那么显然这个函数就能用。
脚本随后可能这样处理
#define HAVE_QSORT=1
之后脚本全跑完了,在 make 的时候,就把这些定义的宏导入工程。

实际用代码的地方可能是这样:
程序代码:
#ifdef HAVE_QSORT
    qsort(...);
#else
    Qsort(...);  // 可能是一个你自己实现的版本,或者是其它一些处理方法。
#endif

这样你的代码无论是否 qsort 可用都能运行。
这么处理的好处之一是一旦 qsort 实际可用,那么它的效率很可能比自己写的要好很多。而且 qsort 的代码是共享的。
即使不能用,程序也依然可以成功编译并运行。


[ 本帖最后由 pangding 于 2011-4-5 23:24 编辑 ]
2011-04-05 23:20
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这个 windows 下的做法我还不是很清楚。

不过 windows 下发布的程序很少有从源码级的吧?都要打成安装包。
除了简单的信赖关系查一查,其实它的都是自己这包里全的很,管它以前有没有全往系统里塞就是了。
2011-04-05 23:31
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:11 
我觉得是不是打断点进行调试后就可以看见函数是否调用了

免费赠送河蟹一只
2011-04-06 09:54
快速回复:如何判定某个函数是否可用?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031444 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved