2

我在外部库中调用了一个函数,该函数在版本 1 和版本 2 之间添加了一个参数。我想同时支持这两个版本。

在这一点上我做

 extern void run(int param1); 

 ... in the code ...
 run(123);

在版本 2 中,它运行(int param1,int param2)。

我可以动态检测我链接的库的版本吗?(参数数量)

我想避免让用户在 Makefile 中设置库版本并使用预处理器-ifs 解决这个问题。

4

1 回答 1

0

C 代码的工作方式是 v1 函数只能访问第一个传递的参数。只要该参数对两个版本具有相同的含义,您就可以安全地将两个参数传递给提供的任何函数。v1 只会看到第一个;v2 将看到这两个参数。

这种能力来自于 C 的架构需要支持可变数量的参数,例如printf(). 调用代码在调用完成后删除参数,并将参数从右向左推送,以便第一个(最左边的)参数始终位于堆栈帧的顶部。

只有当库的 API 因升级而被严重亵渎时,第一个参数才会有不同的含义。

于 2012-04-11T23:16:04.283 回答