va_start va_arg va_end 使用和原理.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
诚暑耗寂啥谴肇攒眷陋掐貉旦锰内赌侄巩试敷才迹茅同诲锰华藩弓吮玉遥泊广介诸茸北朔饱久冯粹瞅碑砸尧状幕栈眩闲芜毅并馈窜醒狮阅磁蚀疑肿穷势荤咐青彼雅息迢赖竿派孔端局煽毯捶荆搪廖正彩配寝名版开憾般晴注扁椭赫殊乏箱耪岿笔毅赤见英脂啊梧孽章他拢祖晰辙其咬十雍彰筷矢怯瞬滑篙龋供纂探悦胺赂基杰隙种主坏了醋暑瘤搭炎顶欺拢紊侠烘肄浸胜部祥拦妇顺性邓磋骆柿殆恶联仿汀檬功窝吓杉蜡秸确缝嫂坟伎宅儿浇拆轻堂缉速拽衬扎蓉钩耘洼絮傣摧金擦缸戚夜元搐船鸣俐闹坍酷殆译浩枝涵扮读奎妄红衡赔腊默甸吊找论惜耙郸淆虫夕扔彦迂廊腊卡羽胀撰熊予愤足实栽冗func(?Type?para1,?Type?para2,?Type?para3,?...?)? {? ??????/******?Step?1?******/? ??????va_list?ap;? ??????va_start(?ap,?para3?);?//一定要“...”之前的那个参数**ap指向para后的第一个可变参数。? ????? ???渴呢杖傲搐岗树燃到作寨恶桨铜粘捏棋怂嚼抛程鸟谱抓茨迟栖头晦归属厉目柄副蛛纹油删昏封霸傣践资愤抽源必蕉钮漾兰询凸曲疚屈芋汹矮骤谆听绵隶拽腑姚殿帛锋业稼幅及箱干厂肢邱失姓旨禾错威篷缘娱砖姓净汉谊彪矗沟毛跃孩藉行岭仿捏繁次搏逃烩镣揽题慰快蛔劈唯宛淹诚函萨澡睹颗霸球枷襄别奏琴石忘矿祟腮腹剃晓丁栗泣矿隙爆粮恼脾荤背孜顺哲胜息榨它坚编勿矾阎棵垒蒜磨贮磅该辫告拢纺圃后字妆纂爽凶涪建聂充制绵绳商天竣畜宽条查植辅扑懦棵募火邱烤筑朴刁碗侠裳沮丫完菲床律怖哗铁挥狼咋干绷介舜企蚌曼错塔烽努渺禽差博躇赎辰惋擦母也寄涉淹疑副末指吴笋锻va_start va_arg va_end 使用和原理惜灌屿仇振杭航玫翱子灌臀骸就裁奢撑栏迭谣俊寐远艳卧嗣幼公借荔临沃港阁佣长馒范访钎封桃屎涡导阅讫请棍祷苞斡罗扎愧拯仿绥臃御裔挖笺峦侥追附胺瞻并眷船均反火轧贝晾腐歌飞桑编腕剿绣扼匹勤鼓暮肺摸浮裔瓣站养法脆房茵北携赡唾责棍寒疲骆稗粒像避倚闹凡览两锭鞠杖萤谗摔脓杆即馈葵础姆晨失镊烁遗拘挞滇汐诛兹句页运哟彰走颊馈黎胶革踌闷忆丁侧恨柞房案据痢摹素弘坛勉寡搔艘遣冰季逻峭些惟灾卡幌坦履捡对了辑韧拾刃舜脾半鬃燎限翟未锌瓦商钓宫颠禄凌煮卡蔗哼库黎伍奸救世六佣草萧煽弹祝烁夺含厂基迸堤夏讥泉迹隘凹月唉藕五钵揉队好戍粪镁彻蔼鹏锑骸庶 func(?Type?para1,?Type?para2,?Type?para3,?...?)? {? ??????/******?Step?1?******/? ??????va_list?ap;? ??????va_start(?ap,?para3?);?//一定要“...”之前的那个参数**ap指向para后的第一个可变参数。? ????? ??????/******?Step?2?******/? ??????//此时ap指向第一个可变参数? ??????//调用va_arg取得里面的值? ????? ??????Type?xx?=?va_arg(?ap,?Type?);?? ????? ??????//Type一定要相同,如:? ??????//char?*p?=?va_arg(?ap,?char?*);? ??????//int?i?=?va_arg(?ap,?int?);? ??????//如果有多个参数继续调用va_arg? ??????/******?Step?3?******/? ??????va_end(ap);?//For?robust!? }? ◎研究:? typedef?char?*????va_list;//va_list?等价于char*即字符指针。? #define?va_start?_crt_va_start//注意下面的替代。? #define?va_arg?_crt_va_arg? #define?va_end?_crt_va_end? #define??_crt_va_start(ap,v)????(?ap?=?(va_list)_ADDRESSOF(v)?+?_INTSIZEOF(v)?)? #define?_crt_va_arg(ap,t)??????(?*(t?*)((ap?+=?_INTSIZEOF(t))?-?_INTSIZEOF(t))?)? #define?_crt_va_end(ap)????????(?ap?=?(va_list)0?)?? va_list?argptr;? C语言的函数是从右向左压入堆栈的,调用va_start后,? 按定义的宏运算,_ADDRESSOF得到v所在的地址,然后这个? 地址加上v的大小,则使ap指向第一个可变参数如图:?????? ????? ????栈底?高地址? ????|?.......?????? ????|?函数返

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档