易截截图软件、单文件、免安装、纯绿色、仅160KB

对C/C++可变参数表的深层探索

2005-09-12 09:16
作者:宋宝华
出处:天极网
责任编辑:方舟
  函数max看起来简洁明了,但是实际上printf的实现却远比这复杂。max函数之所以看起来简单,是因为:
  (1) max函数可变参数表的长度是已知的,通过num参数传入;
  (2) max函数可变参数表中参数的类型是已知的,都为int型。
  而printf函数则没有这么幸运。首先,printf函数可变参数的个数不能轻易的得到,而可变参数的类型也不是固定的,需由格式字符串进行识别(由%f、%d、%s等确定),因此则涉及到可变参数表的更复杂应用。
  下面我们以实例来分析可变参数表的高级应用。
高级应用
  下面这个程序是我们为某嵌入式系统(该系统中CPU的字长为16位)编写的在屏幕上显示格式字符串的函数
DrawText,它的用法类似于int printf ( const char *format, ...
)函数,但其输出的目标为嵌入式系统的液晶显示屏幕(LED)。
///////////////////////////////////////////////////////////////////////////////
// 函数名称: DrawText
// 功能说明: 在显示屏上绘制文字
// 参数说明: xPos ---横坐标的位置 [0 .. 30]
// yPos ---纵坐标的位置 [0 .. 64]
// ... 可以同数字一起显示,需设置标志(%d、%l、%x、%s)
///////////////////////////////////////////////////////////////////////////////
extern void DrawText ( BYTE xPos, BYTE yPos, LPBYTE lpStr, ... )
{
 BYTE lpData[100]; //缓冲区
 BYTE byIndex;
 BYTE byLen;
 DWORD dwTemp;
 WORD wTemp;
 int i;
 va_list lpParam;
 memset( lpData, 0, 100);
 byLen = strlen( lpStr );
 byIndex = 0;
 va_start ( lpParam, lpStr );
 for ( i = 0; i < byLen; i++ )
 {
  if( lpStr[i] != ’%’ ) //不是格式符开始
  {
   lpData[byIndex++] = lpStr[i];
  }
  else
  {
   switch (lpStr[i+1])
   {
    //整型
    case ’d’:
    case ’D’:
     wTemp = va_arg ( lpParam, int );
     byIndex += IntToStr( lpData+byIndex, (DWORD)wTemp );
     i++;
     break;
     //长整型
    case ’l’:
    case ’L’:
     dwTemp = va_arg ( lpParam, long );
     byIndex += IntToStr ( lpData+byIndex,


相关文档:

航空公司管理系统(VC++ 与SQL 2005)

系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
      这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......

程序高手必读:写好C程序的10条秘籍

   神乎其技,惟C程序,功到自成,十大建议!
  1、汝应频繁催动lint工具,据其语法声明修习内力,此事皆因lint之思虑决断实远在君上。
  
  2、不可依随NULL指针,如若不然,混沌痴颠必俟君于彼岸。
  
  3、纵有天赋大智慧,知晓其事无碍,汝亦当尽数强制挪移函数参数为原型所期之数据类型,以免一 ......

C/C++——小编谈C语言函数那些事(13)

C程序是由一组或是变量或是函数的外部对象组成的。 函数是一个自我包含的完成一定相关功能的执行代码段。下面小编和大家分享下C语言中的函数。
1.       malloc函数
malloc函数的功能是内存分配函数,其用法为:void *malloc(unsigned size);程序实例如下:
#include <stdio.h>
#i ......

C/C++——小编谈C语言函数那些事(14)

C程序是由一组或是变量或是函数的外部对象组成的。 函数是一个自我包含的完成一定相关功能的执行代码段。下面小编和大家分享下C语言中的函数。
 
1.       normvideo函数
 
malloc函数的功能是选择正常亮度字符,其用法为:void normvideo(void);程序实例如下:
#include < ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号