赞
踩
int printf(const char *format, ...);
变参宏,即该宏可以接受可变数量的参数。stdarg.h 头文件为函数提供了一个类似的功能,但是用法比较复杂。必须按如下步骤进行:
1.提供一个使用省略号(一定是最后的参数)的函数原型;
2.在函数定义中创建一个va_list类型的变量;
3.用宏把该变量初始化为一个参数列表;
4.用宏访问参数列表;
5.用宏完成清理工作。
#include <stdio.h> #include <stdarg.h> double sum(int, ...); int main(void) { double s, t; s = sum(3, 1.1, 2.5, 13.3); t = sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1); printf("return value for " "sum(3, 1.1, 2.5, 13.3): %g\n", s); printf("return value for " "sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1): %g\n", t); return 0; } 【5步曲↓↓↓↓↓】 double sum(int lim, ...) { ➊←[parmN]==lim,格式正确 va_list ap; ➋←储存参数的对象[va_list] va_start(ap, lim); ➌←把ap通过[va_start]初始化为参数列表 double tot = 0; for (int i = 0; i < lim; i++) tot += va_arg(ap, double); ➍←通过[va_arg]访问参数列表中的每一项 va_end(ap); ➎←通过[va_end]完成清理工作 return tot; }
return value for sum(3, 1.1, 2.5, 13.3): 16.9
return value for sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1): 31.6
#include <iostream>
void callback(void) {
std::cout << "Hello, world.\n";
}
void print(void (*p)(void)) {
p();
}
int main() {
print(callback);
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。