gpt4 book ai didi

c - 在什么情况下应该使用 va_list

转载 作者:太空狗 更新时间:2023-10-29 17:18:03 25 4
gpt4 key购买 nike

我制作了一个小型 C 库,它实现了图论算法并将它们绑定(bind)到 Python 中。

我发给 friend 看,他告诉我va_list是“危险的”,不能用在这种项目中。

那么问题来了。在什么情况下应该使用va_list

最佳答案

我看到的主要问题是,无法保证您确实获得了您期望的参数数量,并且无法对此进行检查。这使得错误无法检测到,而无法检测到的错误显然是最危险的一种。 va_arg 也不是类型安全的,这意味着如果您传递一个 double 并期望一个 unsigned long long,您将得到垃圾一个漂亮的整数,并且无法在编译时检测到它。 (当类型甚至不具有相同的大小时,它会变得更加困惑)。

根据您处理的数据,这可能或多或少是个问题。如果您传递指针,省略参数几乎会立即致命,因为您的函数将检索垃圾,而这可能(如果行星正确对齐)成为一个漏洞。

如果您传递“常规”数字数据,则取决于函数是否关键。在某些情况下,您可以通过查看函数的输出轻松检测到错误,而在某些实际情况下,如果函数失败,这确实不是什么大问题。

实际上,这一切都围绕着您是否害怕自己忘记争论。

C++11 具有可变参数模板功能,允许您以安全的方式处理任意数量的参数。如果从 C 到 C++ 的步骤没有造成太大伤害,您可以研究一下。

关于c - 在什么情况下应该使用 va_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435002/

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