Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在外部库中调用了一个函数,该函数在版本 1 和版本 2 之间添加了一个参数。我想同时支持这两个版本。
在这一点上我做
extern void run(int param1); ... in the code ... run(123);
在版本 2 中,它运行(int param1,int param2)。
我可以动态检测我链接的库的版本吗?(参数数量)
我想避免让用户在 Makefile 中设置库版本并使用预处理器-ifs 解决这个问题。
C 代码的工作方式是 v1 函数只能访问第一个传递的参数。只要该参数对两个版本具有相同的含义,您就可以安全地将两个参数传递给提供的任何函数。v1 只会看到第一个;v2 将看到这两个参数。
这种能力来自于 C 的架构需要支持可变数量的参数,例如printf(). 调用代码在调用完成后删除参数,并将参数从右向左推送,以便第一个(最左边的)参数始终位于堆栈帧的顶部。
printf()
只有当库的 API 因升级而被严重亵渎时,第一个参数才会有不同的含义。