使用vsprinf進行緩衝儲存

2021-09-26 14:21:33 字數 967 閱讀 2110

at_result_e atprintftobuf(const char *format, ...)

else

}

當你的函式的引數個數不確定時,就可以使用上述巨集進行動態處理,這無疑為你的程式增加了靈活性。

va_list的使用方法:

a)  首先在函式中定義乙個具有va_list型的變數,這個變數是指向引數的指標。

b)  然後用va_start巨集初始化變數剛定義的va_list變數,使其指向第乙個可變引數的位址。

c)  然後va_arg返回可變引數,va_arg的第二個引數是你要返回的引數的型別(如果多個可變引數,依次呼叫va_arg獲取各個引數)。

d)  最後使用va_end巨集結束可變引數的獲取。

在使用va_list是應該注意一下問題:

1)  可變引數的型別和個數完全由**控制,它並不能智慧型地識別不同引數的個數和型別。

2)  如果我們不需要一一詳解每個引數,只需要將可變列表拷貝到某個緩衝區,可以用vsprintf函式。

3)  因為編譯器對可變引數的函式原型檢查不夠嚴格,對程式設計查錯不利,不利於我們寫出高質量的**。

intsizeof 巨集,獲取型別占用的空間長度,最小占用長度為int的整數倍:

#define _intsizeof(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

#define va_start(ap,v) ( ap = (va_list)&v + _intsizeof(v) )

#define va_arg(ap,t) ( *(t *)((ap += _intsizeof(t)) - _intsizeof(t)) )

va_end巨集,清空va_list可變引數列表:

#define va_end(ap) ( ap = (va_list)0 )

幀緩衝儲存器

幀緩衝儲存器 frame buffer 簡稱幀快取或視訊記憶體,它是螢幕所顯示畫面的乙個直接映象,又稱為位對映圖 bit map 或光柵。幀快取的每一儲存單元對應螢幕上的乙個畫素,整個幀快取對應一幀影象。幀緩衝是linux為顯示裝置提供的乙個介面,把視訊記憶體抽象後的一種裝置,他允許上層應用程式在圖...

使用儲存過程進行分頁的 儲存過程

使用儲存過程進行分頁的 use blog gocreate procedure blogcontent page pagesize int,一頁多少條 pageindex int,第幾頁 pagecount int output 一共多少頁,輸出引數 asbegin declare totalrec...

cache 高速緩衝儲存器

cache 高速緩衝儲存器 一種特殊的儲存器子系統,其中複製了頻繁使用的資料以利於快速訪問。儲存器的高速緩衝儲存器儲存了頻繁訪問的 ram 位置的內容及這些資料項的儲存位址。當處理器引用儲存器中的某位址時,高速緩衝儲存器便檢查是否存有該位址。如果存有該位址,則將資料返回處理器 如果沒有儲存該位址,則...