博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中不定参数函数的使用
阅读量:7120 次
发布时间:2019-06-28

本文共 1076 字,大约阅读时间需要 3 分钟。

由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦。C语言中实现不定参数函数的问题是利用调用函数时使用的堆栈来解决。原理是通过堆栈读取可选参数的值,直到读取到所设定的结束标志为止。 下面程序的可选参数的结束标志设置为可选参数参数小于0。

 

在VC++6.0的include有一个 头文件,有如下几个 :
#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)) )     //返回ap地址处的值,同时ap指向下一个可选参数的地址
#define va_end(ap) ( ap = (va_list)0 )                                                       // 将 置为无效
#include "stdafx.h"#include "stdarg.h"void test(int i,int j, ...){	int data;	va_list args;									//定义va_list变量	printf("%d %d", i, j);	va_start(args,j);								//使args指向j后的第一个可选参数	while((data = va_arg(args,int)) >= 0)			 //va_arg函数返回参数args指针所对应的变量值,同时args指向下个可选参// 数. 参数大于或者等于0时,读取数据,同时把读取的数据打印出来。当读         //到小于0的参数时,结束循环。			printf(" %d", data);	printf("\n");	va_end(args);                            //使args指针无效	}int main(int argc, char* argv[]){	test(0, 1 , 3, -1);	return 0;}
//程序输出结果为0 1 3
/*main调用test函数堆栈的分布如下图:  地址:	高  ...............  			|   ...............			|	第二个可选的参数	  		|	第一个可选的参数		  	|	j			|	i			低  test的返回地址*/

 

 

转载地址:http://ehfel.baihongyu.com/

你可能感兴趣的文章
C语言字符串和数字转换函数大全
查看>>
InfluxDB删除数据
查看>>
开篇记录
查看>>
我的友情链接
查看>>
debian6 Redis+phpredis安装
查看>>
Google Auth+openssh
查看>>
NFS服务器配置及客户端挂载
查看>>
ELK(elasticsearch+logstash+kibana)开源日志分析平台搭建
查看>>
Debian 8.0桌面系统root用户登录和root用户自动登录
查看>>
Windows 8 新启动方式:混合启动(Hybrid Boot)
查看>>
cacti 安装
查看>>
Eclipse大括号换行显示
查看>>
*.manifest 文件
查看>>
要在jsp界面上显示一行三个控件
查看>>
我的linux学习之路-文件的创建于删除
查看>>
NFS-上课内容
查看>>
数字电子技术基础第一章随手笔记
查看>>
如何解决MySQL 服务正在启动 . MySQL 服务无法启动. 服务没有报告任何错误.的问题...
查看>>
linux环境下tomcat中catalina.out文件过大问题
查看>>
linux日志轮转功能
查看>>