函数可变参数

VA_LIST的用法:
(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;

(2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,使其指向第一个可
变参数的地址;

(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数
的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);

(4)最后用VA_END宏结束可变参数的获取。使用VA_LIST应该注意的问题:
  (1、可变参数的类型和个数完全由程序代码控制,它并不能智能地识别不同参数的个数和类型;
  (2、如果我们不需要一一详解每个参数,只需要将可变列表拷贝至某个缓冲,可用vsprintf函数;
  (3、因为编译器对可变参数的函数的原型检查不够严格,对编程查错不利.不利于我们写出高质量的代码;
小结:可变参数的函数原理其实很简单,而VA系列是以宏定义来定义的,实现跟堆栈相关。我们写一个可变参数的C函数时,有利也有弊,所以在不必要的场合,我们无需用到可变参数,如果在C++里,我们应该利用C++多态性来实现可变参数的功能,尽量避免用C语言的方式来实现。

int max(int num, ...){
    int m = -0x7FFFFFFF;
    va_list ap;
    va_start(ap, num);
    for(int i = 0; i < num; i++){
        int t = va_arg(ap, int);
        if(t > m) m =t;
    }
    va_end(ap);
    return m;
}

int main(){
    int n = max(5, 5, 6, 3, 8, 5);
    cout << n;
}
时间: 2024-12-25 03:11:27

函数可变参数的相关文章

PHP函数可变参数列表的具体实现方法介绍

PHP函数可变参数列表可以通过_get_args().func_num_args().func_get_arg()这三个函数来实现.我们下面就对此做了详细的介绍. AD:2014WOT全球软件技术峰会北京站 课程视频发布 也许对于PHP初级程序员来说,对于PHP函数并不能完全熟练的掌握.我们今天为大家介绍的PHP函数可变参数列表的实现方法主要是利用func_get_args().func_num_args().func_get_arg()这三个系统函数来实现的,其中func_get_args()

C语言之函数可变参数

先上一段代码: #include<cstdarg> #include<iostream> #include<string> using namespace std; void error(char* format,...){//至少要有一个参数,后边的...表示参数可变 va_list ap; int d,flag; char c, *s; va_start(ap,*format);//从args参数开始后面都是可变参数,va_start,va_end都为宏 while

c#编程基础之函数可变参数

可变参数:int sum (params int[] values)int sum (string name,params int[] values) 注意:params参数必须是形参表中的最后一个参数. 代码如下: using System; using System.Collections.Generic; using System.Text; namespace 函数可变参数学习 { class Program { static void Main(string[] args) { Say

Python新手学习基础之函数-可变参数*

可变参数( * ) 可变参数,顾名思义,它的参数是可变的,比如列表.字典等.如果我们需要函数处理可变数量参数的时候,就可以使用可变参数. 我们在查看很多Python源码时,经常会看到 某函数(*参数1, **参数2)这样的函数定义,这个*参数和**参数就是可变参数,一时会让人有点费解.其实只要把函数可变参数的定义搞清楚了,就不难理解了. 当我们不知道需要用几个参数来定义函数的时候,可变参数就可以大展手脚了. 在Python里,带 * 的参数就是用来接受可变数量参数的. 如果一个函数定义如下: d

php课外笔记--函数可变参数列表的实现

php课外笔记--函数可变参数列表的实现 php的函数方面非常强大,但对于一些php新手来说,理解有部分困难,不能完全熟练的掌握. php培训教程中,介绍一部分函数可变参数列表的实现方法: PHP函数可变参数列表的实现方法主要是利用func_get_args().func_num_args().func_get_arg()这三个系统函数来实现的,其中func_get_args()函数以数组的形式获得参数列表,具体用法参看手册. PHP函数可变参数列表代码如下: < ?php    /*   函数

C语言函数可变参数列表

C语言允许使用可变参数列表,我们常用的printf函数即为可变参数函数,C标准库提供了stdarg.h为我们提供了这方面支持:该头文件提供了一些类型和宏来支持可变参数列表,包括类型va_list,宏va_start.va_arg.va_end: 可变函数参数定义方法: #include <stdarg.h> void func(int count,...){ va_list ap; int ix, tmp; va_start(ap, a); for(ix=0;ix < count; ++

c 语言函数可变参数的处理

/************************************************************************* > File Name: va_list.c > Author: zshh0604 > Mail: [email protected] > Created Time: 2014年10月14日 星期二 15时16分09秒 **********************************************************

【C语言】模拟实现printf函数(可变参数)

一.printf函数介绍 printf功能 printf函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息. printf原型 int printf( const char* format , [argument] ... ); //定义在stdio.h中 以上部分来自于高小调博客(一个UI非常好,没有广告,纯绿色的博客,建议大家收藏) 二.利用可变参数列表模拟实现printf 1.分析printf函数 printf("Hello haohaosong!\n"); prin

Lua学习笔记3. 函数可变参数和运算符、转义字符串、数组

1. Lua函数可以接受变长数目的参数,和C语言类似,在函数的参数列表中使用(...)表示函数可以接受变长参数 lua函数将参数存放在一个table中,例如arg,那么#arg可以获得参数的个数 function func_no_p(...) local arg={...} for k,v in pairs(arg} do print(v ..",") end print("输入参数个数:".. #arg) end func_no_p(1,2,34,1,"