list定義的是什么類型?
C語言參數從右到左進棧,棧的增長方式是從高地址往低地址,所以在??臻g里面,參數排布非常整齊而有規律,從第一個參數開始,按參數大小緊密排列;當讀取可變參數的時候,一般來說一定至少有一個不可變的參數,取最后一個不可變參數的地址,加上這個參數的大小,就是下一個可變參數的起始地址,之后按參數的類型添加相應的位移,依次取出這些參數。這就是可變參數的原理。va_list等宏實際上也是這么做的。所以如果想要用自定義的可變參數來調用vprintf,可以自己分配一段空間,然后依次將想要傳入的可變參數填充到這個空間中,最后把這個空間的地址強制轉換為va_list然后傳給vprintf。在大多數架構上,va_list是個簡單的指針類型。
用va_xxx的宏應該也是可以的不保證在其他奇奇怪怪的架構上也都能用不過還是那句話,何必呢,正常情況下都不如對每個參數調用一次printf……