簡體   English   中英

[C]我可以使用比參數更大的類型調用va_arg,然后強制轉換值嗎?

[英][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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM