首页 相关文章 编程入门:浅谈C语言的可变参数

编程入门:浅谈C语言的可变参数

C语言中有些函数使用可变参数,比如常见的int printf( const char* format, ...),第一个参数format是固定的,其余的参数的个数和类型都不固定。  C语言用va_start等宏来处理这些可变参数。这些宏看起来很复杂,其实原理挺简单,就是根据参数入栈的特点从最靠近第一个可变参数的固定参数开始,依次获取每个可变参数的地址。下面我们来分析这些宏。  在stdarg.h头文件中,针对不同平台有不同的宏定义,我们选取X86平台下的宏定义:

  typedef char * va_list;  #define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )  #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )  #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )  #define va_end(ap) ( ap = (va_list)0 )   _INTSIZE...[ 查看全文 ]

2016-02-19 标签:

编程入门:浅谈C语言的可变参数的相关文章

手机页面
收藏网站 回到头部