zoukankan      html  css  js  c++  java
  • C 函数可变参数

    C 函数可变参数

    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;
    }
    
  • 相关阅读:
    ex01 温度转换1
    12 字典的遍历在 Python2 与 Python3 中区别
    11 序列中有多个最值时会索引出哪个
    10 isalpha() 对于字母的定义
    09 Python3 的深拷贝与浅拷贝
    08 in
    07 len()
    06 “杠零”与空字符
    导航点击字体变色
    清除浮动
  • 原文地址:https://www.cnblogs.com/shaolw/p/5565154.html
Copyright © 2011-2022 走看看