gpt4 book ai didi

c - 在编译时计算函数参数计数

转载 作者:行者123 更新时间:2023-12-04 04:27:19 26 4
gpt4 key购买 nike

我有一个 C 库(带有 C 头文件),它存在于两个不同的版本中。
其中之一具有如下所示的函数:

int test(char * a, char * b, char * c, bool d, int e);
另一个版本看起来像这样:
int test(char * a, char * b, char * c, bool d)
(为此, e 不是作为函数参数给出的,而是在函数本身中硬编码的)。
库或其头文件没有定义/包含任何检查库版本的方法,所以我不能只使用 #if#ifdef检查版本号。
有什么办法可以编写一个可以用这个库的两个版本编译的C程序,这取决于编译程序时安装的是哪个版本?这样,想要编译我的程序的贡献者可以自由使用库的任一版本,并且该工具可以使用任一版本进行编译。
所以,澄清一下,我正在寻找这样的(或类似的):
#if HAS_ARGUMENT_COUNT(test, 5)
test("a", "b", "c", true, 20);
#elif HAS_ARGUMENT_COUNT(test, 4)
test("a", "b", "c", true);
#else
#error "wrong argument count"
#endif
有没有办法在C中做到这一点?我想不出办法。
该库将是 libogc ( https://github.com/devkitPro/libogc ),它更改了 if_config 的定义前阵子,我想让我的程序在旧版本和新版本上都能运行。我在库中找不到任何版本标识符。目前我使用的是 GCC 8.3 的修改版本。

最佳答案

这应该在 configure 上完成。阶段,使用 Autoconf(或 CMake,或其他)测试步骤——基本上,尝试编译一个使用五参数签名的小程序,并查看它是否编译成功——以确定正在使用的库版本.这可用于设置预处理器宏,您可以在 #if 中使用该宏。阻止您的代码。

关于c - 在编译时计算函数参数计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64888608/

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