可變引數的理解

2022-03-10 22:34:06 字數 501 閱讀 5158

c中的printf中的引數就是典型的可變引數,引數不固定,那怎麼獲取呢

正常情況下c的函式引數入棧規則為__stdcall, 它是從右到左的,即函式中的最右邊的引數最先入棧

#include #include 

#define __va_rounded_size(type) \(((

sizeof (type) + sizeof (int) - 1) / sizeof (int)) * sizeof (int

))void test(int a, int

b)int

main()

結果為a address is 3e20571c

b address is 3e205718

b values is 2

a values is 1

明顯b的位址要高於a, b先於a入棧

肯定知道b的位址,那麼a的值 就是 *(int) (&b+sizeof(int)) 

參考這裡

關於c 可變引數的理解

最近在看cocos2dx的原始碼,發現有很多地方用到了可變引數,就是三個點,然後查了查資料,把自己的思路整理一下,希望能對看到的人有幫助。首先三個點的值傳到了巨集 va args 中 va args 只能在巨集中替換可變引數,下面舉個例子 該例子 於http 具體是那篇我忘了 include inc...

可變引數列印 解析可變引數

1.的一般用法 define str s s define cons a,b int a e b int main 2.接受,列印可變引數 參考 glibc庫的bebug函式 define printf fmt,args.printf fmt,args 使用方法 define pr debug fm...

可變引數及可變引數巨集的使用

我們在c語言程式設計中會遇到一些引數個數可變的函式,例如printf 這個函式,這裡將介紹可變函式的寫法以及原理.一般在除錯列印debug 資訊的時候,需要可變引數的巨集.從c99開始可以使編譯器標準支援可變引數巨集 variadic macros 另外gcc 也支援可變引數巨集,但是兩種在細節上可...