[英][C]Can I call va_arg with a larger type than the argument, then cast the value?
我想知道这是否是有效的代码:
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);
}
我写了一些不必要的复杂代码,犯了错误,我觉得这是修正我所做的事情的最简单方法,而无需重写整个过程,但是我不知道这是否会导致错误(或段错误,或者是其他东西)。
不,问题不仅限于大小。 如果类型不匹配,则整个程序的行为是不确定的。 当传递的实际值适合任一正负号时,有一些非常有限的例外,例如正负号不匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.