栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何检查该功能是否存在于C / C ++中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何检查该功能是否存在于C / C ++中

尽管其他答复是有用的建议(

dlsym
,函数指针等),但是您 不能编译 引用不存在的函数的C ++代码。至少必须 声明
函数;如果不是,您的代码将无法编译。如果没有任何内容(编译单元,某些目标文件,某些库) 定义 该函数,则链接器会抱怨(除非它很弱,请参见下文)。

但是您应该真正解释为什么要问这个。我猜不到,有一些方法可以实现您的目标。

注意,

dlsym
通常需要不带名称修饰的函数,即声明为
extern"C"

如果在使用GCC的Linux上进行编码,则还可以在声明中使用

weak

function属性。然后,链接器会将未定义的弱符号设置为null。

附加物

如果要从某个输入中获取函数名称,则应注意,只有那种方法的子集应该可以那样调用(如果不加小心地调用任意函数,它将崩溃!),并且最好更好地构造该子集。然后

std::map
,您可以使用或
dlsym
((声明子集中的每个函数
extern"C"
)。注意,
dlopen
使用
NULL
路径可以给主程序提供一个句柄,您应该将其链接
-rdynamic
以使其正常工作。

您确实希望仅通过它们的名称来调用适当定义的函数子集。例如,你可能不希望把这种方式

abort
exit
fork

注意 如果您 动态地 知道被调用函数的签名,则可能要使用libffi对其进行调用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号