#MACRO...#ENDMACRO


Preprocessor directive to define a multiline macro

Syntax:
#macro identifier( [ parameters ] )
body
#endmacro

#macro identifier( [ parameters, ] variadic_parameter... )
body
#endmacro

Description:
#macro is the multi-line version of #define.

Examples:
' macro as an expression value

#macro Print1( a, b )
    a + b
#endmacro

Print Print1( "Hello ", "World!" )

/' Output :
Hello World!
'/

' macro as multiple statements

#macro Print2( a, b )
    Print a;
    Print " ";
    Print b;
    Print "!"
#endmacro

Print2( "Hello", "World" )

/' Output :
Hello World!
'/

' macro with a variadic parameter

#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
'/

' macro with a variadic parameter which can contain several sub-parameters:
'   To distinguish between the different arguments passed by variadic_parameter,
'   you can first convert variadic_parameter to a string using the Operator # (Preprocessor Stringize),
'   then differentiate in this string (#variadic_parameter) each passed argument by locating the separators (usually a comma).

#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'
'/

Differences from QB:
See also:
Back to Preprocessor
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki



sf.net phatcode