用于代替过程参数来传递可变数量的参数,或用作数组声明中的上限,以表示元素数量将由初始化程序确定。
语法
说明
省略号(三个点,
...)用于过程声明和定义以指示可变参数列表。必须始终指定第一个参数,并且必须使用C调用约定
cdecl调用该函数。在过程主体中,
va_first,
va_arg和
va_next用于处理变量参数。
只支持数字类型和指针作为参数。可以传递
Strings,在这种情况下,将采用
ZString Ptr到字符串数据。
使用省略号代替数组声明中的上限会导致根据
expression_list 中出现的数据设置上限。当以这种方式使用省略号时,初始化程序必须出现,并且不能为
Any.
在
#define或
#macro声明中使用最后一个参数后面的省略号可以创建一个可变宏。这意味着可以将任何数量的参数传递给
variadic_parameter ,这可以在
body 中使用,就像它是一个普通的宏参数一样。
variadic_parameter 将扩展到传递给它的参数的完整列表,包括逗号,也可以完全为空。
例子
Declare Function foo cdecl (x As Integer, ...) As Integer
Dim As Integer myarray(0 To ...) = {0, 1, 2, 3}
Print LBound(myarray), UBound(myarray) ''0, 3
''使用可变宏来包装可变函数
#include "crt.bi"
#define eprintf(Format, args...) fprintf(stderr, Format, args)
eprintf(!"printf你好:%i%s%i \\ n", 5, "测试", 123)
''类似LISP的访问器允许修改逗号分隔列表
#define car(a, b...) a
#define cdr(a, b...) b
与QB差别
参考