【C语言】函数不定长参数
前言
- 基于头文件 stdarg.h
- 基于 STM32
- 基于 C
- 如果读者对指针和堆栈的知识点比较熟悉,本笔记就一眼飘过,只需要看看怎么用就可以了哈哈。
语法
- 主要的宏
- va_list
- va_start
- va_arg
- va_end
va_list
- 不同平台,该宏可能不一样,以下是 STM32+C
- void *
- 这个指针就是一张白纸,任何类型的指针都能赋值给 void* 类型。
typedef struct __va_list { void *__ap; } va_list;
va_list args;
- va_list 用于存放可变长参数的
va_start
- 获取可变参数列表的第一个参数的地址
- args 必须为 va_list 类型
- str 参数必须为可变长参数(...)的前一个参数的地址
va_start(args,str);
va_arg
- 获取可变参数的当前参数
- 返回指定类型
- 并将指针指向下一参数
- 第二个参数为类型,即int、char char*之类的
a = va_arg(args,int);
va_end
- 空va_list可变参数列表
a = va_end(args);