gpt4 book ai didi

使用未知数量的参数调用库函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:03 26 4
gpt4 key购买 nike

我必须从 so 库加载函数(采用恒定数量的参数,如 powsin)并使用中给出的参数执行它命令行。库和函数的名称也在命令行参数中给出。此外,我有一个字符串编码的参数数量及其类型,例如“ii”表示两个整数。所以我可以使用 dlopen() 加载这个库并使用 dlsym 加载函数但是我无法想象如何将所有参数传递给这个函数,而它们的数量在执行。

最佳答案

C 支持 vararg 调用,其中变量部分在函数声明中用椭圆表示。它在标准的 7.15 变量参数中定义。这是 C 的一个相当晦涩的部分,但在标准库中大量用于 *printf*scanf 函数系列,以及 execl 一个。

恕我直言,这很晦涩,因为您需要一些魔法来猜测实际传递了哪些参数。对于*printf*scanf,你依赖格式字符串来声明,对于execl,你假设它是一个C列表字符串(空终止字符数组),以 NULL 指针终止。

这种调用适用于调用者知道参数数量的用例(再次考虑 *printf)。如果参数的数量可以在运行时变化,例如命令行参数,则数组更合适。毫不奇怪,main 函数接收其参数列表作为数组 + 数组长度。如果您希望能够将命令行参数传递给另一个函数(无论是否在 dll 中),只需模仿它并传递一个数组,其长度作为另一个参数,或者按照约定以它终止空指针。

关于使用未知数量的参数调用库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com