C/C++可变参数
C++ 参数 可变
2023-09-11 14:20:53 时间
★函数:
使用VA_LIST宏组解决变参问题
1、首先定义va_list型的变量,这个变量是指向参数的指针。
2、然后用va_start宏初始化刚定义的va_list变量,这个宏的第二个参数是“第一个可变参数的前一个参数”。
3、再用va_arg得到可变参数,第二个参数是“可变参数”的类型。
4、最后用va_end宏结束可变参数的获取。如果有多个可变参数,依次调用va_list获取各个参数。
使用VA_LIST应该注意的问题:
1、可变参数函数,必须通过某种方式事先预知传入参数的类型。可变参数函数的调用者,必须按照该方式传入对应类型的参数。一旦参数类型不匹配,将可能导致返回错误或无意义的数据,甚至栈被破坏。
2、编译器对可变参数的函数的原型检查不够严格,不利于写出高质量代码。在非必要情况下,应当尽量采用C++重载、多态等方式实现函数,而尽量不要使用可变参数。
★宏
宏也可以带可变参数,如:
#define PRINT( format, ... ) printf( format, ## __VA_ARGS__ );
“##”不可以省略,如果省略,就不可以省略可变参数部分。比如:“PINTF("hello");”,无可变参数部分,解释PRINT宏时就会多出一个“,”号,导致编译出错。
或者可以这样定义:
#define PRINT( format, args... ) printf( format, ##agrs );
相关文章
- 自己实现c++中string 类
- C++控制台程序的命令行参数输入-且支持参数opts扩展
- 托管C++线程锁实现 c++11线程池
- c++中返回参数为引用时不能是在栈中分配的(必须在堆中创建这样内存是手动释放,而栈中因为函数结束会自动释放栈中的内存)
- [C++]:万字超详细讲解多态以及多态的实现原理(面试的必考的c++考点)
- C++代码使用 gperftools 工具进行性能分析
- 《C++编程规范:101条规则、准则与最佳实践》——1.2:在高警告级别干净利落地进行编译
- 《C++面向对象高效编程(第2版)》——2.30 has-a关系的重要性
- 基于C++实现(控制台)单位职工管理系统(数据结构)【100010017】
- C/C++小数保留问题
- C和C++中的不定参数
- C++ ------ 虚函数覆盖、重载
- 127、【贪心算法】leetcode ——455. 分发饼干:DFS+双指针法(C++版本)
- 107、【树与二叉树】leetcode ——236. 二叉树的最近公共祖先:回溯法(C++版本)
- C++组合通信
- C++ main函数的参数
- C++ main函数的参数
- 编程参考 - C++的析构函数的个数只能有一个
- C++11 可变模板参数