【发布时间】:2018-06-29 22:00:59
【问题描述】:
我想知道这是否是有效的代码:
int a(va_list args, int is_int, ...)
{
long long n = va_arg(args, long long);
return (is_int ? ((int)n) : n);
}
void b(va_list args)
{
int x = -100;
a(args, 1, x);
}
我写了一些不必要的复杂代码,我犯了错误,我觉得这是最简单的方法来修复我所做的而不重写整个事情,但我不知道这是否会导致错误(或段错误,或其他)。
【问题讨论】:
-
这被称为测试你的代码......但如果我理解正确......你没有测试......并且你没有错误?
-
我测试了它,我没有错误,但我知道有时候,当你尝试阅读一些你不应该阅读的东西时,你的代码在大多数情况下甚至可以“工作”如果它远非有效或安全,我编辑了我的帖子,试图澄清我的问题。
-
你不应该那样做。问题不在于演员阵容,而是
va_args获取的内存比传递给函数的内存多。这会扰乱va_args的后续调用。恐怕您将不得不重写调用a()的部分并传递适当的值。
标签: c types casting variadic-functions