C 语言中用 ... 表示可变参数,例如:

void fun(int x ...)

头文件 cstdarg.h 中包含可变参数类型va_list和处理可变参数的三个宏:

  • va_list 实际上是char*类型
  • va_start(ap,v),确定可变参数的起始地址,该宏定义为:
#define va_start _crt_va_start
#define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
  • va_arg(ap,type),根据type类型取参数地址,该宏定义为:
#define va_arg _crt_va_arg
#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
  • va_end(ap),将可变参数地址置为0
#define va_end _crt_va_end
#define _crt_va_end(ap)      ( ap = (va_list)0 )

例子:

#include <iostream>
#include <cstdarg>

using namespace std;

/*
可变参数函数
*/

void error(int x ...){
	va_list arg;
	va_start(arg, x);
	while (true){
		char* p = va_arg(arg, char*);
		if (p == NULL) break;
		cout << p << endl;
	}
	va_end(arg);
}
int main(){
	error(1, "hello", "world", "haha",NULL);//要使用NULL来标记参数列表尾
	return 0;
}

相关文章:

  • 2022-12-23
  • 2021-11-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2019-12-11
  • 2021-05-19
猜你喜欢
  • 2022-12-23
  • 2022-01-02
  • 2022-12-23
  • 2021-11-16
  • 2021-07-11
相关资源
相似解决方案