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

C变参函数的实现机制

C的变参问题与print函数的实现
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() 这个函数,它的定义是这样的: int printf( const char* format, ...); 
它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法:
   printf("%d",i);
   printf("%s",s);
   printf("the number is %d ,string is:%s", i, s);
究竟如何写可变参数的C函数以及这些可变参数的函数编译器是如何实 现的呢?本文就这个问题进行一些探讨,希望能对大家有些帮助.会
C++的网友知道这些问题在C++里不存在,因为C++具有多态性.但C++是C的一个 超集,以下的技术也可以用于C++的程序中.限于本人
的水平,文中如果有 不当之处,请大家指正. 
(一)写一个简单的可变参数的C函数 
下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏: 
void va_start( va_list arg_ptr, prev_param ); 
type va_arg( va_list arg_ptr, type ); 
void va_end( va_list arg_ptr ); 
va在这里是variable-argument(可变参数)的意思. 
这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.下面我们写一个简单的可变参数的函数,该函数至少有一个整数
参数,第二个参数也是整数,是可选的.函数只是打印这两个参数的值. 
   void simple_va_fun(int i, ...)
   {
     va_list arg_ptr;
     int j=0;
     
     va_start(arg_ptr, i);
     j=va_arg(arg_ptr, int);
     va_end(arg_ptr);
     printf("%d %d\n", i, j);
     return;
   } 
我们可以在我们的头文件中这样声明我们的函数: extern void simple_va_fun(int i, ...); 我们在程序中可以这样调用:
   simple_va_fun(100);
   simple_va_fun(100,200);
   从这个函数的实现可以看到,我们使用可变参数应该有以下步骤:
   1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针.
   2)然后用va_


相关文档:

C面试题汇总

1、  int a=2,b=11,c=a+b++/a++; 则c值为多少?
【考点】编码规范。
表面上考察你对运算符优先级的掌握程度,但实际上优先级这些玩意很难死记硬背得住?大家的疑惑不就是运算符的结合顺序么?那么如何去避免呢?c=a+((b++)/(a++))不就行了么,其实问题背后考察的是你的编码规范,如何写清晰易懂的代码,如何在一个团 ......

Linux 下编译C程序

GCC 支持了许多不同的语言,包括 C、C++、Ada、Fortran、Objective C,Perl、Python 和 Ruby,甚至还有Java。
  Linux 内核和许多其他自由软件以及开放源码应用程序都是用 C 语言编写并使用 GCC 编译的。
  编译C++程序:
  -c 只编译不连接
  g++ file1 -c -o file1.o
  g++ file2 -c -o file2.o
  g++ f ......

C/C++时间函数的使用

一、获取日历时间
time_t是定义在time.h中的一个类型,表示一个日历时间,也就是从1970年1月1日0时0分0秒到此时的秒数,原型是:
 typedef long time_t;        /* time value */
可以看出time_t其实是一个长整型,由于长整型能表示的数值有限,因此它能表示的最迟时间是2038年 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号