在C语言中比较常用的可变参数就是printf();函数原型如下:
int printf(const char * format,...);
写一个简单的可变参数:
- #include <stdarg.h>
- void va_fun(int i,...);
- int main(void)
- {
- va_fun(100);
- va_fun(200,100);
- va_fun(100,200,300);
- }
- void va_fun(int i,...)
- {
- va_list arg_ptr;
- int j = 0;
- va_start(arg_ptr,i);
- j = va_arg(arg_ptr,int);
- va_end(arg_ptr);
- printf("%d %d\n",i,j);
- }
这样就实现了一个简单的可变参数。其实可变参数是利用宏来实现的,宏在参数的堆栈中查找参数的位置,然后返回。
定义如下:
typedef char * va_list;
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
其实就是计算参数堆栈中的内存地址。
建议少用可变参数,在c++中用多态实现就可以。
printf中根据format中的参数的个数确定后面参数的个数。
分享到:
相关推荐
下面将详细介绍C语言中可变参数的实现原理、使用方法以及注意事项。 一、可变参数的原理 在C语言中,可变参数的实现基于调用约定(calling convention),通常涉及到两个关键函数:`va_start`、`va_end` 和一个宏 ...
在C语言中,可变参数的使用是一种灵活的特性,允许函数接受不同数量或类型的参数。这在处理如`printf`等需要动态参数列表的函数时非常有用。`printf`函数的定义允许用户根据需要传递任意数量的格式化参数。 在C语言...
本文讨论了C语言中可变参数的用法,包括如何写一个简单的可变参数的C函数,如何使用可变参数宏va_start、va_arg和va_end,以及可变参数在编译器中的处理。 一、写一个简单的可变参数的C函数 在C语言中,某些函数...
本文将深入解析C语言中可变参数列表的使用方法,包括其基本概念、实现机制、应用场景和编程实践。 可变参数列表为C语言函数提供了接受不定数量参数的能力,使得编写通用和灵活的函数成为可能。本文详细介绍了可变...
### C语言可变参数及printf函数的实现 在C语言编程中,虽然可变参数(variadic functions)在自定义接口中较少应用,但作为核心功能之一,它在标准库函数如`printf`中扮演着关键角色。本文将深入探讨C语言中可变...
1. 可变参数列表的实现原理:通过C语言预定义的宏va_start、va_arg、va_end在stdarg.h头文件中,可以使得函数访问参数个数不定的参数列表。 2. va_start宏的作用:va_start宏初始化参数列表,为后续使用va_arg宏...
通过本文的学习,我们了解了可变参数列表的基本概念、使用方法和示例。掌握这项技术可以帮助我们编写更灵活、更强大的C语言程序。无论是对于初学者还是有经验的开发者来说,熟悉可变参数列表都是提升C语言编程技能的...
本文将详细探讨如何使用C语言来实现一种可变分区的内存管理模拟,特别关注最佳适应算法。 **一、可变分区分配** 可变分区分配是一种内存管理策略,它允许内存空间动态地划分成大小不等的分区,以适应不同大小的...
### C语言可变参数函数实现探究 在C语言中,可变参数函数为开发者提供了极大的灵活性,尤其是在处理不确定数量的参数场景中。本篇将深入探讨C语言中可变参数的实现机制,重点分析`_va_list`和`_vsnprintf`函数,...
C51可变参数函数允许程序员设计能接受不定数量参数的函数,这在C语言中是通过头文件stdarg.h提供的宏实现的。stdarg.h在Keil C51环境中也提供了对可变参数函数的支持,可以让嵌入式开发人员灵活地编写函数,以处理...
在C语言中,处理可变参数函数的基本机制涉及以下步骤和知识点: 1. **问题的提出**:在实际应用中,我们经常会遇到需要设计参数数目可变的函数情况,例如求若干个非零整数的平均值,而参数的结束标志是0。在教科书...
在实际编程中,为了确保代码的可移植性,通常会使用`stdarg.h`提供的工具来安全地处理变长参数。例如,`printf`函数能够解析`fmt`字符串并根据其中的格式说明符正确地处理各种类型的变长参数。 总的来说,C语言的变...
### C语言中的可变参数用法详解 在C语言中,可变参数函数是指那些能够接受不定数量参数的函数。这种特性在很多场合下都非常有用,尤其是在日志记录、错误处理以及网络通信等场景中。本文将通过一个具体的示例来深入...
设计可变参数函数的关键在于使用`stdarg.h`库中的宏和类型,比如`va_list`、`va_start`、`va_arg`和`va_end`。以下是设计可变参数函数的基本步骤: 1. 定义一个指向可变参数列表的指针`va_list ap`。 2. 使用`va_...
在C语言中,可变参数列表的实现依赖于`stdarg.h`库中的宏和数据类型。要定义一个可变参数列表的函数,我们需要以下几步: 1. 定义一个固定参数列表,通常包含至少一个参数,用于确定函数调用的上下文。例如,这个...
在C语言中,变长参数(Variable Argument List)是一种允许函数接收数量可变的参数的机制。这种功能在处理如`printf`这样的格式化输出函数时非常有用。C标准库提供了一个名为`stdarg.h`的头文件,包含了处理变长参数...
在C语言中,处理可变参数的方法依赖于`stdarg.h`头文件中定义的一组宏,包括`va_start`, `va_arg`, 和 `va_end`。 首先,`va_start`宏用于初始化一个`va_list`类型的变量,通常命名为`ap`(argument pointer)。这...