gpt4 book ai didi

c - c中具有不同类型参数的可变参数函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:44 24 4
gpt4 key购买 nike

我想知道是否可以在 C 中创建一个接受不同类型参数的可变参数函数。即

void fillDatabase(char* name, int age){
writeToDatabase(name, age);
}

int main(){
fillDatabase("Paul", 19);
fillDatabase("Herbert");
}

在这里,我试图用姓名和年龄填充数据库。但也可以只填写姓名而不填写年龄。所以我想知道我是否可以为此使用相同的功能,或者我是否必须编写两个不同的功能?

Online我只能找到具有相同类型参数的可变参数函数的示例。

提前致谢!

最佳答案

在 C99 中,可变参数函数使用 stdarg(3)操作(通常实现为扩展为编译器特定神奇东西的宏,例如 GCC 内置函数)。第一个参数应该有一些固定的已知类型,并且通常决定如何获取其他参数;在当今的几个 ABI 中,可变函数参数传递不使用寄存器,因此效率低于固定元数函数调用。

在你的情况下,你最好有几个函数。对于灵感,sqlite 有 several open functions .

请注意,POSIX 定义了一些带有一个last 可选参数的函数,特别是 open(2) .这可能是作为一个函数实现的,该函数的 last 参数不能提供。

您可以阅读 ABI规范和 calling conventions特定于您的实现。

顺便说一句,没有函数重载(就像在 C++ 中一样)可以理解为 C 的一个优势(函数名——这是 linker 唯一关心的事情,至少在 Linux 和 Unix 上——决定了它的签名) .因此 C++ 实际上需要 name mangling .另请阅读 dynamic linkingdlopen

关于c - c中具有不同类型参数的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33742356/

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