我在外部库中调用一个函数,该函数在版本1和版本2之间添加了一个参数。我想支持这两个版本。
此时我做了
extern void run(int param1);
... in the code ...
run(123);
在版本2中运行(int param1,int param2)。
我能否以某种方式动态检测我链接的库的版本? (参数数量)
我想避免让用户在Makefile中设置库版本,并使用preprocessor-ifs解决这个问题。
答案 0 :(得分:0)
C代码的工作方式是v1函数只能访问第一个传递的参数。只要该参数对两个版本具有相同的含义,您就可以安全地将这两个参数传递给提供的任何函数。 v1只能看到第一个; v2将看到两个参数。
这种力量来自于C支持可变数量参数的架构需求,例如printf()
。调用代码在调用完成后删除参数,并从右向左推送参数,以便第一个(最左侧)参数始终位于堆栈帧的顶部。
只有当库的API因升级而被严重亵渎时,第一个参数才有不同的含义。