... (省略)
 
用于代替过程参数来传递可变数量的参数,或用作数组声明中的上限,以表示元素数量将由初始化程序确定。

语法

Declare { Sub | Function } proc_name cdecl ( param As datatype, ... )

Dim array_symbol ([lbound To] ...) [As datatype] => { expression_list }

#define identifier ( [ parameters , ] variadic_parameter ... ) body

说明

省略号(三个点,...)用于过程声明和定义以指示可变参数列表。必须始终指定第一个参数,并且必须使用C调用约定cdecl调用该函数。在过程主体中,va_firstva_argva_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差别

  • 新的FreeBASIC

参考