[ASM C/C++] C语言函数的可选性自变量
函数的可选性自变量
C语言允许定义自变量数量可变的函数,称为variadic函数。variadic函数需要固定数目的强制性自变量,后面是数量可变的可选性自变量。
也就是说必须至少有一个强制性自变量。
variadic 可变参数数量有前面的强制性自变量决定,或者有定义可选性自变量列表的特殊值决定。
经典的函数是printf 和 scanf,这两个是通过格式化字符串来提取可变参数的数量的。
定义:
void test(int count, ...)
编写variadic函数时,必须用va_list类型定义自变量指针,来在存取可选性自变量。
可以用 stdarg.h 头文件中的四个宏来处理自变量指针。
void va_start( va_list argptr, lastparam );
开始使用可选性自变量之前,先调用此宏来初始化。
使用第一个可选性自变量的位置来初始化argptr指针,第二个参数为函数的最后一个有名称参数。
void va_arg( va_list argptr, type );
取可选性自变量,并前移指针。type为可刚刚读入的自变量类型。
void va_end( va_list argptr );
不再需要自变量指针时,调用va_end. 使用va_start 或 va_copy 来重新初始化且过的自变量指针,也要先调用va_end。
void va_copy( va_list dest, va_list src);
使用目前的src自变量初始化dest。
#include <stdio.h>
#include <stdarg.h> //可选性自变量函数,count 为数量
void arg_var(char name[], int count, ...)
{
printf("name is: %s \ncount is: %d \n", name, count); va_list argptr; //定义自变量类型
va_start(argptr, count); //初始化自变量
for(int i=; i<count; i++)
{
printf("%s \n", va_arg(argptr, char *)); //取值打印
}
va_end(argptr); //结束使用
} int main(int argc, char * argv[])
{
// call arg_var
arg_var("abeen", , "strarg1", "strarg2", "strarg3");
}
[ASM C/C++] C语言函数的可选性自变量的更多相关文章
- c语言函数的可选性自变量
功能: 宏va_arg()用于给函数传递可变长度的参数列表. 首先,必须调用va_start() 传递有效的参数列表va_list和函数强制的第一个参数.第一个参数代表将要传递的参数的个数. 其次,调 ...
- keil or c51 汇编调用c语言函数 容易忽视的问题
最近,在用keil 写一个小程序时,想实践一下从汇编调用 C语言函数,我们都知道C语言调用汇编函数讨论得较多,但反过来,从汇编中调用C语言的函数未见深入分析:在开始的时候,还是忽视了一个问题,就是对现 ...
- Go 语言函数
函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回类型,和参数. ...
- Go语言函数
目录 函数定义 函数返回多个值 函数参数 Go 语言函数值传递 Go语言函数引用传递 函数用法 函数作为值 匿名函数 闭包 方法 不定参数的函数 init函数 内建函数 函数调用机制 总结 函数定义 ...
- GO语言学习(十二)Go 语言函数
Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ...
- 从linux0.11中起动部分代码看汇编调用c语言函数
上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...
- C语言(函数)学习之strstr strcasestr
C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...
- C语言函数sscanf()的用法
从文件读取数据是一件很麻烦的事,所幸有sscanf()函数. C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( st ...
- 不可或缺 Windows Native (6) - C 语言: 函数
[源码下载] 不可或缺 Windows Native (6) - C 语言: 函数 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 函数 示例cFunction.h # ...
随机推荐
- MySQL 实现row_number() 分组排序功能
数据库基本脚本 CREATE TABLE `a` ( `ID` INT(10) NULL DEFAULT NULL, `class` INT(10) NULL DEFAULT NULL, `score ...
- oracle查询某个时间点的数据
1. select * from emps as of timestamp to_Date('2015-12-11 14:00:00','yyyy-mm-dd hh24:mi:ss'),SQL语句是查 ...
- web前端程序员真的值这么多钱吗?
对于互联网公司来说用户就是上帝,做好客户体验一切才有可能.所以互联网公司都会把钱砸向前端,Web前端程序员也越来越受到企业争相聘用. 前端工程师工资也越来越高,目前Web前端工程师工作1~2年后通常会 ...
- Object转数组
int length = Array.getLength(value);String[] newarray = new String[length];for (int i = 0; i < le ...
- UE4入门与精通
由于目前在使用UE4引擎,多少也有一些心得,比如在日常使用中会遇到一些问题.坑(潜规则)或者一些使用技巧等.本人决定开一个大坑,主要有两个目的:一是可以自己做个记录,二是可以给大家提供一些参考吧.主要 ...
- cs
cs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- 下载VM12 虚拟机和安装kali
为什么现在才写这个-- 因为我在学校啊,学校的电脑还没有kali.好了我们开始. http://www.vmware.com/products/player/playerpro-evaluation ...
- eclipse自动补全快捷键失效,sysout用不了!
好久没写Java代码了,使用新版Neon的Eclipse Java EE IDE开发时,自动补全各种失败,sysout也各种用不了, 开始还以为是电脑卡比呢,原来是版本的快捷键不同了,修改方法如下! ...
- WIN10 多用户登录
WIN10 多用户登录 参考下面链接 http://www.mysysadmintips.com/windows/clients/545-multiple-rdp-remote-desktop-ses ...
- 【皇甫】☀初识AOP
新知识,新起点,下面介绍一下aop所要准备架包和各个层 特点: 创建好的各个层: 所需架包: 具体步骤: No.1 搭建分层架构 entity 1 public class User impleme ...