FreeBASIC マニュアルのトップに戻る

FreeBASIC Dots

目次→命令文→手続き...(Ellipsis)←オリジナル・サイト

...(省略) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

引数の可変数を渡すために、手続きパラメーターの代わりに使われます。
あるいは、配列宣言で、要素の数が initializer によって決定される場合の、配列要素数の上限として、使われます。

構文:
declare { sub | function } proc_name cdecl ( param_list, ... ) { | [ Byref ] As return_type }

dim array_symbol ([lbound to] ...) [as datatype] => { expression_list }

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

記述:
可変個変数手続き
省略記号(3つの点、...)は、手続きの宣言と定義で、可変個の引数リストを示すために、使われます。

(少なくとも)最初の引数は必ず指定する必要があり、手続きは C 呼び出し規約 cdecl を使って呼び出す必要があります。

手続き本体では、cva_list データ型と cva_arg マクロを使って、省略記号パラメータ(...)を展開し、可変個引数手続きに渡される引数の値を取得できます。
引数リストは、 cva_start で初期化されるか、 cva_copyでコピーされると、 cva_list パラメーターを使って別の手続きに渡すことができます。

一部のターゲットでは、下位互換性のために、引き続き va_first, va_arg および va_next を使って変数引数を処理できます。

変数引数としてサポートされているのは数値型とポインターだけです(変数引数に渡されるすべての byte と short は、暗黙で integer に変換され、変数引数に渡されるすべてのシングルは暗黙で double に変換されます)。
String を渡すことができます。その場合、文字列データへの Zstring Ptr が取得されます。

可変個引数手続き名は、多重定義できません。

可変個マクロ
省略記号を #define#macro 宣言の最後のパラメーターの後ろに使うと、可変個引数マクロを作成できます。
これは、variadic_parameter に任意の数の引数を渡すことができることを意味します。 任意の数の引数は、通常のマクロパラメーターであるかのように 本体 で使用できます。
variadic_parameter は、コンマを含む、渡された引数の完全なリストに展開されます。完全に空にすることもできます。

注意: variadic_parameter によって渡されるさまざまな引数を区別するには、最初に 演算子 # (Preprocessor Stringize) を使って variadic_parameter を文字列に変換し、次にこの文字列(#variadic_parameter)で、区切り文字(通常はコンマ)を見つけて渡される各引数を区別します。

配列の上限
配列宣言の上限の代わりに省略記号を使うと、expression_list に表示されるデータに従って上限が設定されます。
省略記号をこのように使う場合、初期化子を表示する必要があり、Any にすることはできません。

例:
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(!"Hello from printf: %i %s %i\n", 5, "test", 123)

'' LISP-風のアクセサーで、コンマ区切りのリストを修正できるようにします
#define car(a, b...) a
#define cdr(a, b...) b



QBからの違い:

参照:
手続きに戻る
変数引数 に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2021-12-05 03:07:07
日本語翻訳:WATANABE Makoto、原文著作者:AntoniGual

ホームページのトップに戻る

表示-非営利-継承