va_list、va_start和va_end的用法

news/2024/12/4 3:52:31/

在项目的代码中看到函数不定参数的使用,现在总结一下va_list、va_start和va_end三个宏的用法。
c语言提供了函数的不定长参数使用,比如 void func(int a, …)。三个省略号,表示了不定长参数。注意:c标准规定了,函数必须至少有一个明确定义的参数,因此,省略号前面必须有至少一个参数。
va_list宏定义了一个指针类型,这个指针类型指向参数列表中的参数。
void va_start(va_list ap, last_arg),修改了用va_list申明的指针,比如ap,使这个指针指向了不定长参数列表省略号前的参数。
type va_arg(va_list, type),获取参数列表的下一个参数,并以type的类型返回。
void va_end(va_list ap), 参数列表访问完以后,参数列表指针与其他指针一样,必须收回,否则出现野指针。一般va_start 和va_end配套使用。
函数的参数一般从右至左先后入栈,根据栈的特性,也就是,最左边的参数最先出栈。贴一段代码介绍下va_list、va_start和va_end的使用。

感兴趣的,可以把函数的整型换成char或者int,参数列表判断条件为NUL,还可以为每个参数指定类型。

#include <stdio.h>
#include <stdarg.h>
void functestarg(int, ...);
int main ()
{functestarg(1,2,3,4,5,6,7,8,9,10,0);return 0;
}
void functestarg(int a, ...)
{va_list argpointer;va_start(argpointer, a);int argument;int count = 0;while(0 != (argument = va_arg(argpointer, int))){printf("parameter%d:%d\n", ++count, argument);}
}

感兴趣的,可以把函数的整型换成char或者int,参数列表判断条件为NUL,还可以为每个参数指定类型。


http://www.ppmy.cn/news/165108.html

相关文章

va_start和va_end详解

1. 在C中&#xff0c;当无法列出传递函数的所有实参的类型和数目时&#xff0c;可以用省略号指定参数表。例如&#xff1a; void foo(...); void foo(parm_list,...); 2. 函数参数的传递原理 函数参数是以栈的形式存取&#xff0c;从右至左入栈。 参数的内存存放格式&#xff…

#、##、__VA_ARGS__和##__VA_ARGS__的作用

一、#用来把参数转换成字符串 例子一&#xff1a; #define P(A) printf("%s:%d\n",#A,A); int main(int argc, char **argv) { int a 1, b 2; P(a); P(b); P(ab); system("pause"); } 输出为&#xff1a; 例子二&#xff1a; #define SQUARE(x) …

“河南省数字化转型与信息技术应用创新专家研讨会-政府数字化转型推动信创产业发展”专场活动成功召开

由《中国信息化》杂志社主办的“2023河南省数字化转型与信息技术应用创新专家研讨会——政府数字化转型推动信创产业发展”专场活动于5月27日&#xff0c;在郑州成功举办。本次活动由深圳竹云科技股份有限公司协办&#xff0c;由河南省测绘学会、中国信息主管平台支持。中国交通…

史上最简单笔记本选购攻略(给对笔记本配置完全不懂的小白,建议收藏)

引言&#xff1a;这是我偶然间找到的一篇文章&#xff0c;面向对配置参数完全不懂的小白&#xff0c;高手请自动忽略哈 参考链接&#xff1a;http://www.360doc.com/content/19/0122/12/60764982_810572945.shtml 上周五&#xff0c;小安发了一条关于如何选购手机的攻略&#…

选购笔记本注意的要点

随着消费者对个人电脑移动需求的增加&#xff0c;笔记本电脑早已成为众多人心目中的首选。但是怎样选购好一台笔记本电脑&#xff1f;其实对于不了解这个行业的人来说&#xff0c;多数人还是比较茫然的。以下我们试着从几个方面探讨&#xff0c;了解哪些是购买笔记本电脑时应该…

linux-动态库制作与使用

​​​​​​(6条消息) linux-静态库制作与使用_云的小站的博客-CSDN博客 目录 创建动态库 使用动态库 根据静态库创建时写的两个源文件&#xff0c;我们来制作动态库 创建动态库 根据这2个源文件和2个头文件我们来学习制作动态库。 我们先让编译两个源文件成.o文件,注意要…

如何挑选电脑

我们如果需要挑选一个属于我们自己的办公设备&#xfe63;-&#xfe63;笔记本电脑&#xff0c;那我们应该通过哪些方面进行筛选呢&#xff1f;今天&#xff0c;向大家推荐应该怎么挑选适合自己的笔记本电脑。 首先第一点确认自己的需求&#xff0c;是需要配置高的或是配置相对…

笔记本选购指南2020双十一

对于很多电脑小白来说&#xff0c;选择电脑也是一件非常头疼的事情 各种**参数、配置&#xff0c;**在加上各位行业大佬给的建议&#xff0c;简直让人云里雾里&#xff01; 那么今天小黑就给大家介绍一下笔记本的一些基础知识&#xff0c;让你5分钟成为电脑小达人&#xff01;…