下面程序实现了两个可变参数函数,maxInt 接受n个整数,返回最大的数;maxStr接受n个字符串,返回最长的那个。
#include其他 1.可变参数函数必须要有一个固定参数吗? 不一定,有的环境下va_start只接收一个va_list类型参数,这种情况下可变参数函数或许可以没有参数,没有验证过。 2.关于va_copy va_copy 原型是void va_copy(va_list dest, va_list src);提供了两个va_list拷贝功能。其不是标准C提供的,而是在C99中定义的,可以选择使用。#include using namespace std;int maxInt(int num, ...);std::string maxStr(int num, ...);int main(){ int n = maxInt ( 5, 5, 6 ,3 ,8 ,5); cout << n; std::string m = maxStr(5, "a", "ab", "abc", "abcd", "abcde"); std::cout << m << std::endl; return 0;}int maxInt(int num, ...){ int m = 0; 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;}std::string maxStr(int num, ...){ std::string ret; va_list ap; va_start(ap, num); for(int i = 0; i < num; i++) { std::string l_tmp = va_arg(ap, char*); std::cout << "get param: " << l_tmp << std::endl; if(l_tmp.length() > ret.length()) ret = l_tmp; } va_end(ap); return ret;}