软件测试 (软件测试证书)

软件测试 (软件测试证书)

本文目录导航:

软件测试|Python函数参数之必传参数、自动参数、可变参数、关键字参数的具体经常使用

在Python编程中,了解并熟练运用不同类型的函数参数至关关键。

四种关键的参数类型包含必传参数、自动参数、可变参数和关键字参数,它们各有特点和运行场景。

必传参数在调用时必定提供,而自动参数则准许用户在未指定时经常使用预设值。

可变参数准许函数接受不确定数量的参数,星号(*)用于接纳位置可变参数,双星号(**)则用于接纳关键字参数。

经过关键字参数,函数调用时可以依据参数名传递值,提高了可读性。

把握这些参数的经常使用,能够优化函数的灵敏性和代码的可保养性。

必传参数似乎基本需求,调用函数时无法或缺;自动参数则为用户提供了方便,防止频繁调用时每次都必定提供一切参数。

可变参数准许函数顺应不同数量的输入,星号(*)和双星号(**)的组合让接纳参数的方式愈加灵敏。

而关键字参数则像一把钥匙,经过参数名间接指定值,消弭了调用顺序的困扰。

要深化了解每种参数类型,可以经过浏览相关教程和通常,如入门书籍、在线课程和实战名目,始终积攒阅历。

同时,关注测试前沿类和求职类消息,有助于了解行业灵活和面试技巧。

经过优化技艺和职业布局,软件测试工程师能够更好地顺应行业变动,成功职业开展。

c/c++支持可变参数的函数

一、为什么要经常使用可变参数的函数?普通咱们编程的时刻,函数中方式参数的数目通常是确定的,在调用时要依次给出与方式参数对应的一实际践参数。

但在某些状况下宿愿函数的参数个数可以依据须要确定,因此c言语引入可变参数函数。

这也是c配置弱小的一个方面,其它某些言语,比如fortran就没有这个配置。

典型的可变参数函数的例子有大家相熟的printf()、scanf()等。

二、c/c++如何成功可变参数的函数?为了支持可变参数函数,C言语引入新的调用协定, 即C言语调用商定 __cdecl . 驳回C/C++言语编程的时刻,自动经常使用这个调用商定。

假设要驳回其它调用商定,必定参与其它关键字申明,例如WIN32 API经常使用PASCAL调用商定,函数名字之前必定加__stdcall关键字。

驳回C调用商定时,函数的参数是从右到左入栈,个数可变。

由于函数体不能预先知道传出去的参数个数,因此驳回本商定时必定由函数调用者担任堆栈清算。

举个例子://C调用商定函数int __cdecl Add(int a, int b){return (a + b);}函数调用:Add(1, 2);//汇编代码是:push 2 ;参数b入栈push 1 ;参数a入栈call @Add;调用函数。

其实还有编译器用于定位函数的表白式这里把它省略了addesp,8 ;调用者担任清栈假设调用函数的时刻经常使用的调用协定和函数原型中申明的不分歧,就会造成栈失误,这是另外一个话题,这里不再细说。

另外c/c++编译器驳回宏的方式支持可变参数函数。

这些宏包含va_start、va_arg和va_end等。

之所以这么做,是为了参与程序的可移植性。

屏蔽不同的配件平台形成的差异。

支持可变参数函数的一切宏都定义在stdarg.h 和 varargs.h中。

例如规范ANSI方式下,这些宏的定义是: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 )经常使用宏_INTSIZEOF是为了依照整数字节对齐指针,由于c调用协定上方,参数入栈都是整数字节(指针或许值)。

三、如何定义这类的函数。

可变参数函数在不同的系统下,驳回不同的方式定义。

1、用ANSI规范方式时,参数个数可变的函数的原型申明是:type funcname(type para1, type para2, ……);对于这个定义,有三点须要说明:普通来说,这种方式至少须要一个普通的方式参数,可变参数就是经过三个.来定义的。

所以……不示意省略,而是函数原型的一局部。

type是函数前往值和方式参数的类型。

例如:int MyPrintf(char const* fmt, ……);然而,咱们也可以这样定义函数:void MyFunc(……);然而,这样的话,咱们就无法经常使用函数的参数了,由于无法经过上方所讲的宏来提取每个参数。

所以除非你的函数代码中确实没有用到参数表中的任何参数,否则必定在参数表中经常使用至少一个普通参数。

留意,可变参数只能位于函数参数表的最后。

不能这样:void MyFunc(……, int i);2、驳回与UNIX 兼容系统下的申明方式时,参数个数可变的函数原型是:type funcname(va_alist);然而要求函数成功的时刻,函数名字前面必定加上va_dcl.例如:#i nclude int average( va_list );void main( void ){。

。

。

//代码}/* UNIX兼容方式*/int average( va_alist )va_dcl{。

。

。

//代码}这种方式不须要提供任何普通的方式参数。

type是函数前往值的类型。

va_dcl是对函数原型申明中参数va_alist的具体申明,实践是一个宏定义。

依据平台的不同,va_dcl的定义稍有不同。

在varargs.h中,va_dcl的定义前面曾经包含了一个分号。

因此函数成功的时刻,va_dcl后不再须要加上分号了。

3、驳回头文件stdarg.h编写的程序是合乎ANSI规范的,可以在各种操作系统和配件上运转;而驳回头文件varargs.h的方式仅仅是为了与以前的程序兼容,两种方式的基本原理是分歧的,只是在语法方式上有一些纤细的区别。

所以普通编程的时刻经常使用stdarg.h.上方的一切例子代码都驳回ANSI规范格局。

四、可变参数函数的基本经常使用方法上方经过若干例子,说明如何成功可变参数函数的定义和调用。

//================================ 例子程序1 ===============#i ncludestdio.h >#i ncludestring.h >#i ncludestdarg.h >/* 函数原型申明,至少须要一个确定的参数,留意括号内的省略号 */ int demo( char *, ... ); void main( void ) { demo( DEMO, This, is, a, demo!, \0);} int demo( char *msg, ... ) { va_list argp; /* 定义保留函数参数的结构 */ int argno = 0; /* 纪录参数个数 */ char *para; /* 寄存取出的字符串参数 */ // 经常使用宏va_start, 使argp指向传入的第一个可选参数, // 留意 msg是参数表中最后一个确定的参数,并非参数表中第一个参数 va_start( argp, msg ); while (1) { //取出以后的参数,类型为char * //假设不给出正确的类型,将失掉失误的参数 para = va_arg( argp, char *); if ( strcmp( para, \0) == 0 ) /* 驳回空串批示参数输入完结 */break; printf( 参数 #%d 是: %s\n, argno, para);argno++; } va_end( argp ); /* 将argp置为NULL */ return 0; }

C言语中的可变参数函数

C言语中的可变参数函数是一种不凡类型,它们准许函数参数个数依据实践调用时的传参灵活变动。

这类函数如printf和sprintf,本文将深化讨论C言语中可变参数函数的相关常识。

了解可变参数函数的关键在于参数在调用时如何在堆栈中存储。

参数从右向左入栈,须要经过地址和类型消息来定位可变参数。

首先,须要知道无法变参数n的类型和地址,而后依次向前推导。

C言语提供了一些规范宏来成功这个环节。

运行上,可变参数函数可以用于方便状况,如预先知道一切参数类型,或许在更复杂的情境中,经过固定参数来灵活确定可变参数的类型。

深入学习可变参数函数,参考以下资料:

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读