麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

va_list 詳解

2019-11-10 20:00:17
字體:
供稿:網(wǎng)友

本文的所有內(nèi)容均來自http://www.cppblog.com/xmoss/archive/2009/07/20/90680.html,感謝此作者:)

VA_LIST 是在C語言中解決變參問題的一組宏

他有這么幾個成員:

1) va_list型變量:

#ifdef  _M_ALPHAtypedef struct {        char *a0;       /* pointer to first homed integer argument */        int offset;     /* byte offset of next parameter */} va_list;#elsetypedef char *  va_list;#endif

2)_INTSIZEOF 宏,獲取類型占用的空間長度,最小占用長度為int的整數(shù)倍:

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

3)VA_START宏,獲取可變參數(shù)列表的第一個參數(shù)的地址(ap是類型為va_list的指針,v是可變參數(shù)最左邊的參數(shù)):

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

4)VA_ARG宏,獲取可變參數(shù)的當(dāng)前參數(shù),返回指定類型并將指針指向下一參數(shù)(t參數(shù)描述了當(dāng)前參數(shù)的類型):

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

5)VA_END宏,清空va_list可變參數(shù)列表:

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

VA_LIST的用法:             (1)首先在函數(shù)里定義一具VA_LIST型的變量,這個變量是指向參數(shù)的指針;       (2)然后用VA_START宏初始化變量剛定義的VA_LIST變量;       (3)然后用VA_ARG返回可變的參數(shù),VA_ARG的第二個參數(shù)是你要返回的參數(shù)的類型(如果函數(shù)有多個可變參數(shù)的,依次調(diào)用VA_ARG獲取各個參數(shù));       (4)最后用VA_END宏結(jié)束可變參數(shù)的獲取。使用VA_LIST應(yīng)該注意的問題:   (1)可變參數(shù)的類型和個數(shù)完全由程序代碼控制,它并不能智能地識別不同參數(shù)的個數(shù)和類型;   (2)如果我們不需要一一詳解每個參數(shù),只需要將可變列表拷貝至某個緩沖,可用vsPRintf函數(shù);   (3)因為編譯器對可變參數(shù)的函數(shù)的原型檢查不夠嚴(yán)格,對編程查錯不利.不利于我們寫出高質(zhì)量的代碼;

小結(jié):可變參數(shù)的函數(shù)原理其實(shí)很簡單,而VA系列是以宏定義來定義的,實(shí)現(xiàn)跟堆棧相關(guān)。我們寫一個可變參數(shù)的C函數(shù)時,有利也有弊,所 以在不必要的場合,我們無需用到可變參數(shù),如果在C++里,我們應(yīng)該利用C++多態(tài)性來實(shí)現(xiàn)可變參數(shù)的功能,盡量避免用C語言的方式來實(shí)現(xiàn)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品一区二区三区在线播放 | 成人三级免费电影 | 久久999久久 | 欧美性激情视频 | 一级在线免费 | 久久久青 | 欧美黄色性视频 | av不卡毛片 | 国产九色在线播放九色 | 成人免费福利 | 九九热精品免费视频 | 免费毛片播放 | 青热久思思 | 亚洲精品成人久久久 | 欧美a在线观看 | 成人短视频在线观看 | 免费人成年短视频在线观看网站 | 亚洲成人精品在线 | 91视频站| 国产一级桃视频播放 | 天天操天天碰 | 亚洲免费视频一区二区 | 亚洲一区在线免费视频 | 日本高清电影在线播放 | 成人福利在线 | 999精品久久久 | av国产片 | 久草成人在线 | 看免费的毛片 | 视频一区二区三区视频 | 九九热视频这里只有精品 | 黄色免费高清网站 | 国产精品久久久久久久午夜片 | 亚洲综合视频在线播放 | 久久成人免费网站 | 视频久久免费 | 欧美日韩在线中文字幕 | 亚洲四播房 | 越南一级黄色片 | 欧美zoofilia杂交videos | 久久蜜桃香蕉精品一区二区三区 |