MTK优美代码赏析8可变参数的C函数.docx

MTK优美代码赏析8可变参数的C函数.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

1

文档仅供参考

MTK优美代码赏析8:可变参数的C函数

对于可变参数函数,自己一直以来都很关注,尤其当自己刚才C#上转到C时,一度曾研究C上的面向对象,将类似printf的函数归类为面向对象里的函数多态,当时只是一个主观感受。今日仔细看了下代码的实现,发现使用C提供的公共接口是可以实现的,但这些接口是如何实现的就不知了。。。

文件:stdarg.h

gcc中的定义为:

/*

/*Definethestandardmacrosfortheuser,ifthisinvocationwasfromtheuserprogram./*Definethestandardmacrosfortheuser,

euserprogram.*/

*/

ifthisinvocationwasfromth

#defineva_start(v,l)__builtin_va_start(v,l)

#defineva_end(v)__builtin_va_end(v)

#defineva_arg(v,l)__builtin_va_arg(v,l)

#if!defined(__STRICT_ANSI__)||__STDC_VERSION__+0>=199900L

#defineva_copy(d,s)__builtin_va_copy(d,s)

#endif

2

文档仅供参考

下面看dbg_print(char*fmt,…)函数实现,部分内容摘自:《用库函数stdarg.h实现函

数参数的可变》://blog.sina/s/blog_4ce3d23e0100efm3.html

dbg_print

dbg_print代码

其他地

其他地方有对这个宏的定义为:

代码

typedefint*va_list[1];

#defineva_start(ap,parmN)(void)(*(ap)=__va_start(parmN))

#defineva_arg(ap,type)__va_arg(*(ap),type)

#defineva_copy(dest,src)((void)(*(dest)=*(src)))

#defineva_end(ap)((void)(*(ap)=0))

#undeftolower

#undefisdigit

#defineisdigit(c)(((c)>=’0′)&&((c)<=’9′))

#definetolower(c)(((c)>=’A’&&(c)<=’Z')?((c)+0×20):(c))

您可能关注的文档

文档评论(0)

聚好信息咨询 + 关注
官方认证
服务提供商

本公司能够提供如下服务:办公文档整理、试卷、文档转换。

认证主体鹤壁市淇滨区聚好信息咨询服务部
IP属地河南
统一社会信用代码/组织机构代码
92410611MA40H8BL0Q

1亿VIP精品文档

相关文档