目次→その他→
プリ・プロセッサ→メタ・コマンド→
#MACRO...#ENDMACRO←オリジナル・サイト
複数行マクロを定義する、プリプロセッサ指示文
構文:
#macro identifier [?] ( [ parameters ] )
body
#endmacro
#macro identifier [?] ( [ parameters, ] variadic_parameter... )
body
#endmacro
説明:
#macro は、
#define の複数行バージョンです。
定義構文の識別子(
identifier)の後にオプションの疑問符(?)を使うと、引数を括弧で囲まずにパラメーター付きのマクロを呼び出すことができます。
注意: トリガーの可能性に注意してください。つまり、マクロの名前を含む式と用語の 1つとの競合が発生します。
注意:関数のような
#define 宣言と異なり、マクロの宣言構文では、マクロ名と開き括弧の間にスペースを入れることができます。
警告:マクロ本体では、演算子の不要な優先順位の変更を受けないようにするために、使われるパラメーターが 1つ以上の演算子を含む式内にある場合は、パラメーターを括弧で囲む必要がある場合があります(演算子で引数として式を渡す場合も)。
例:
'' 式の値としてのマクロ
#macro Print1( a, b )
a + b
#endmacro
Print Print1( "こんにちは、", "世界" )
'' 出力は :
'' 「こんにちは、世界」
Sleep
'' 複数の命令文としてのマクロ
#macro Print2( a, b )
Print a;
Print " ";
Print b;
Print "!"
#endmacro
Print2( "こんにちは", "世界" )
'' 出力は :
'' 「こんにちは 世界!」
Sleep
' 可変個引数パラメーターを持つマクロ
#macro test1( arg1, arg2... )
Print arg1
#if #arg2 = ""
Print "2nd argument not passed"
#else
Print arg2
#endif
#endmacro
test1( "1", "2" )
Print "-----------------------"
test1( "3" )
Print "-----------------------"
test1( 5, 6 )
Print "-----------------------"
test1( 7 )
/' Output :
1
2
-----------------------
3
2nd argument Not passed
-----------------------
5
6
-----------------------
7
2nd argument Not passed
'/
' 複数のサブパラメーターを含むことができる、可変個引数パラメーターを持つマクロ:
' variadic_parameter によって渡されたさまざまな引数を区別するため、
' 最初に、演算子 # (プリプロセッサ文字列化)を使って variadic_parameter を文字列に変換できます。
' 次に、この文字列(#variadic_parameter)で、渡された各引数を、区切り文字(通常はコンマ)を見つけて区別します。
#macro test2( arg1, arg2... )
Print "'" & Trim(#arg1) & "'"
Scope
Dim As String s = Trim(#arg2)
If s <> "" Then
Do
Dim As Integer k = InStr(1, s, ",")
If k = 0 Then
Print "'" & s & "'"
Exit Do
End If
Print "'" & Left(s, k - 1) & "'"
s = Trim(Mid(s, k+1))
Loop
End If
End Scope
#endmacro
test2( 5 )
Print "----"
test2( 5,6, 7, , 9, 10, ,,13, 14 )
/' Output :
'5'
----
'5'
'6'
'7'
''
'9'
'10'
''
''
'13'
'14'
'/
バージョン:
- fbc 1.08.0 より前は、オプションの疑問符 (?) は使えませんでした。
QBとの違い:
参照: