可变函数参数
来源:互联网 发布:虚拟机网络桥接模式 编辑:程序博客网 时间:2024/06/01 09:03
C语言中一般的函数参数都是固定的,包括参数数量和参数类型,但有时参数的数量在执行期前无法确定,该怎么办呢?C语言提供了可变参数的语法,大家最熟悉和常用的函数printf()就是可变参数函数:
int printf( const char* format, ...);
在实现时,需要用到三个宏:va_start(), va_arg()和va_end(),其定义如下:
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 )
利用这些宏,就可以实现可变参数函数了:
void print(int x, ...) { va_list arg; int y=0; va_start(arg_ptr, x); y=va_arg(arg, int); va_end(arg); printf("%d %d\n", x, y); }
实现可变参数的关键在于,调用函数时,函数参数依次入栈,在栈中是相邻的(但未必连续)。
0 0
- 可变参数 函数(可变参数列表--1)
- 可变参数函数 可变参数宏
- 可变参数函数
- 可变参数函数实现
- 可变参数函数
- 可变参数函数实现
- c可变函数参数
- 可变参数函数
- 可变参数函数
- 可变参数函数
- printf函数可变参数
- C可变参数函数
- 可变参数函数
- 可变参数函数使用
- 可变参数函数
- 可变参数函数
- 【转帖】可变参数函数
- 函数可变参数
- linux用户权限相关命令
- java 设计模式 -- 责任链模式
- linux配置jco3
- void及void指针含义的深刻解析
- searchBar没有光标解决方法
- 可变函数参数
- Zynq片内XADC应用笔记
- D的小 L
- 灰度图像阈值化分割常见方法总结及VC实现
- 第4章 塔防游戏
- Android 图片缓存技术支持
- Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass
- 【mongoDB】将mongodb添加到服务
- Mac系统下的一些简单命令(第二部分)