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 也支援可變引數巨集,但是兩種在細節上可...