您好,欢迎光临本网站![请登录][注册会员]  
文件名称: C51可变参数讲解.pdf
  所属分类: 嵌入式
  开发工具:
  文件大小: 72kb
  下载次数: 0
  上传时间: 2019-07-15
  提 供 者: oem****
 详细说明:keil C51可变参数讲解,自定义允许访问可变长度参数列表的函数。MASQENO 举例说明 示例代码1 void Test int a va list ap va start( ap, a b= va arg( ap, int ) va end( ap ) printf(%d, a, b) 1.首先定义一个 va list型的变量ap,也就是char 2. va star(ap,a)宏替换之后就是ap=(a_lst&a+ sizeof(a); 首先取a的地址,即第一个固定参数的地址,然后强制类型转换为 va list,接着后移 的内存大小,把当前这个地址值赋给ap。很明显,就是第一个参数a后面的那个地方,按 照上面说的,也就是第一个可变参数。即现在把ap指向第一个可变参数 3.b= va arg(ap,int)宏替换为b=(nt)ap)+0]; 自加在后,因此是获取第一个参数的值赋给b,然后ap后移一个类型的位置,即指向 下一个元素的地址 4.va_end(ap),这里什么都没有做,在ADS那个版本里是将ap指向NUL,防止误操作 那么按照这种做法,当用 mytest(100,200);调用这个函数时,它将可以打印出100 200。如果用 mytest(100,200,300);调用这个函数,仍然只是显示100,200。如果要将300 打印出来,那么得再使用一次va_arg宏,把它赋值给变量c,把c打印出来。 所以 stdarg里的几个宏只是机械的把每个参数读出来,它甚至不知道现在读的是什么类 型的变量,如果要读下一个变量的话得往后跳多少位置,这些都只能靠程序自己来判断指示。 所以 printf里的格式符号"‰d,%s%c”之类的都是人为规定的,得自己编程识别这些格 式。 ASZENO Confidential Kil 2012-08-09 MAENO 示例代码2 #include #include / for printf * int varfunc (char *buf, int id, .. va start (tag, id) if(d==0) char arg2 3 arg1 = va arg( tag, int); arg2 va arg(tag, char arg3 arg (tag, long) else char arg 1: char * arg2 long arg3 arg 1 =va arg ( arg2 va arg (tag, char *) arg3 arg(tag, long void caller (void) char tmp buffer [10] varfunc( tmp buffer, 0, 27, Test Code",100L); varfunc(tmp buffer, 8L); ASZENO Confidential Kil 2012-08-09 MASQENO 四、结论 函数形参列表中的变量在内存中的位置是顺次排列的。 ASZENO Confidential Kil 2012-08-09
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: C51可变参数讲解.pdf
 输入关键字,在本站1000多万海量源码库中尽情搜索: