c - 使用可变参数动态调用 C 库函数
问题描述
我目前正在编写自己的编程语言,其目标与 C 类似。我的编译目标是 LLVM。
我列表中的下一项是编译时代码执行。为了使它有用,我需要能够调用内置函数。我正在从 C 标准库中自动生成函数原型,以便能够从我的语言中调用它们。现在,为了在解释 CALL 指令时调用这些函数,我想到了用一个更通用的函数包装函数原型,该函数接受 avoid*
作为参数和结果。在我的语言中,包装器看起来像这样:
export import def #extern gethostname(__name: *char, __len: ulong) -> int
def _Fgethostname(args: [*], ret: *) {
@(ret !*int) = gethostname(@(args[0] !**char), @(args[1] !*ulong))
}
这个想法是我可以将函数指针与函数名一起存储在一个数组中,以便能够在编译时选择正确的函数。
翻译成 C 的包装器是这样的:
int gethostname(__name: *char, __len: unsigned long)
void _Fgethostname(void **args, void *ret) {
*((int*)ret) = gethostname(*((char**)args[0]), *((unsigned long*)args[1]))
}
只要正确布置内存,这应该可以工作。遗憾的是,我的方法不适用于可变参数函数。
我知道 Python 可以调用 C 函数,即使使用可变参数。我错过了什么?
解决方案
推荐阅读
- azure - 将根 CA 添加到 Azure 应用服务以进行客户端证书身份验证
- android - 在 Android Studio 中调试 C++/Native 代码不适用于较旧的 Android SDK API 版本
- flutter - Flutter expandable tiles inside grid view
- python - Git 命令中的管道运算符返回错误“致命:格式错误的对象名称 |”
- mysql - 5个数据库之间的MYSQL函数MAX()
- amazon-web-services - 从 Nextjs 无服务器函数安全地连接到 AWS Elasticsearch
- powershell - If/Then - 即使条件为假也执行
- python - 尝试对数据进行高斯+线拟合
- sql - 将 NULL 替换为 0
- mysql - Symfony 5 和 Doctrine,找不到使用 3 个相关实体获取结果的方法